现在有一个这样的xml文件
<1>
<4>
<2>内容1</2>
</4>
<3>
<2>内容2</2>
</3>
<1>很显眼两个<2>元素表示的是不同的内容。现在我要分析xml文件把<2>的内容放到数据库中,这个时候肯定要区分开来的,因为以后还要还原的
请问,怎么做可以达到这个要求。声明:肯定不能把整个xml文件放到数据库中。
<1>
<4>
<2>内容1</2>
</4>
<3>
<2>内容2</2>
</3>
<1>很显眼两个<2>元素表示的是不同的内容。现在我要分析xml文件把<2>的内容放到数据库中,这个时候肯定要区分开来的,因为以后还要还原的
请问,怎么做可以达到这个要求。声明:肯定不能把整个xml文件放到数据库中。
参考msdn中关于Xml空间下的类。
并且随着你的节点深度的增加格式不会变化,
比如把你的原先xml中节点的深度和路径在新的节点中保存为一个属性值存起来。
当使用时进行xsl转换还原成原来的xml文件。
对于xslt文件的制定需要花一些时间了。
样式转换参考,
http://dotnet.aspx.cc/ShowList.aspx?id=11
但如果xml文件十分复杂,且没有多少规律的话,那还是存成blob到数据库吧
用2叉树的算法实现的过程。有例子吗???
ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/xmlsdk/htm/xpath_devguide_overview_86gn.htm
并且随着你的节点深度的增加格式不会变化,
比如把你的原先xml中节点的深度和路径在新的节点中保存为一个属性值存起来。
当使用时进行xsl转换还原成原来的xml文件。
对于xslt文件的制定需要花一些时间了。
样式转换参考,
public DataView GetData(string XmlPathNode)
{
//Get XML Date,return DataView
try
{
XmlNodeList xnl = objXmlDoc.GetElementsByTagName(XmlPathNode);
System.Text.StringBuilder strXml = new System.Text.StringBuilder();
strXml.Append( "<?xml version='1.0' ?><root>" );
for (int i=0; i<xnl.Count; i++)
{
strXml.Append( xnl[i].OuterXml );
}
strXml.Append( "</root>" );
System.IO.StringReader read = new System.IO.StringReader( strXml.ToString() );
ds.ReadXml(read);
}
catch
{
//
}
return ds.Tables[0].DefaultView;
}以你的要求,參數傳字符“2”就可以了!
最後返回一個XML格式的Table:
XML為:
<?xml version='1.0' ?>
<root>
<2>内容1</2>
<2>内容2</2>
</root>把這個Table寫入到數據庫就可以了!
可能我说得不明白吧。
就是说分析完这个xml文件以后,主要的是还要还原成原来一样的格式。而数据库中是不能存任何xml文件所以只能建立辅助表来表现一个元素的层次关系,最后还原出来。
怎样有比较高效的方法了????还请大家指点