C# 读取xml文件时出现问题
我在读取和处理xml文件时遇到了一个问题,我现在无法解决这个问题。 xml具有以下结构:C# 读取xml文件时出现问题,c#,asp.net,xml,C#,Asp.net,Xml,我在读取和处理xml文件时遇到了一个问题,我现在无法解决这个问题。 xml具有以下结构: <root> <test id="1"> <a></a> <b></b> <c></c> </test> <test id="2"> <a></a> <b></b> <c>
<root>
<test id="1">
<a></a>
<b></b>
<c></c>
</test>
<test id="2">
<a></a>
<b></b>
<c></c>
</test>
<test id="3">
<a></a>
<b></b>
<c></c>
</test>
</root>
XmlDocument Doc; int currentid=1;
XmlNode currentlyselectedtestnode =
Doc.SelectNodes("//test[@id = '" +
currentid.ToString() + "']");
string a = currentlyselectedtestnode.SelectSingleNode("//a");
string b = currentlyselectedtestnode.SelectSingleNode("//b");
string c = currentlyselectedtestnode.SelectSingleNode("//c");
xml文档文档;int currentid=1;
XmlNode currentlyselectedtestnode=
Doc.SelectNodes(“//test[@id=”)+
currentid.ToString()+“']”;
字符串a=currentlyselectedtestnode.SelectSingleNode(“//a”);
字符串b=currentlyselectedtestnode.SelectSingleNode(“//b”);
字符串c=currentlyselectedtestnode.SelectSingleNode(“//c”);
不幸的是,“currentlyselectedtestnode.SelectSingleNode(//a”)”将读取所有“a”-节点,而不仅仅是属于id为1的测试节点的节点。为什么?
以某种方式当前选择TestNode。选择SingleNode(//a);就像我写Doc.SelectSingleNode(“//a”)
为什么?!如何使其仅读取特定测试节点的子节点?ectedtestnode.SelectSingleNode(“//c”) 在XPath中使用
//a
时,选择文档中的所有a
节点
如果需要直接子节点,则需要使用currentlyselectedtestnode。选择SingleNode(“a”)
有关学校,请参阅:
/
-从当前节点中选择与所选内容匹配的文档中的节点,无论它们位于何处
您可以使用
//a
选择当前节点下的所有a
节点。这将选择当前节点的所有子a
节点,无论它们嵌套的深度如何。在XPath中使用/a
时,您将选择文档中的所有a
节点
如果需要直接子节点,则需要使用currentlyselectedtestnode。选择SingleNode(“a”)
有关学校,请参阅:
/
-从当前节点中选择与所选内容匹配的文档中的节点,无论它们位于何处
您可以使用
//a
选择当前节点下的所有a
节点。这将选择当前节点的所有子a
节点,无论它们嵌套的深度有多深。不要忘记标记代码,以便正确显示。:)使用编辑器上的“代码”按钮执行此操作,或者我相信使用四个空格进行缩进。不要忘记标记代码,以便正确显示。:)使用编辑器上的“代码”按钮执行此操作,或者我相信通过缩进四个空格来执行。或者,如果它们可以深入嵌套在当前节点中,则可以使用//a
。哦,这使我更接近解决方案。为什么我使用XmlNode currentlyselectedtestnode=Doc.SelectNodes(“//test[@id='”+currentid.ToString()+”)会有区别;或者XmlNode currentlyselectedtestnode=Doc.SelectNodes(“test[@id=”“+currentlid.ToString()+”]);它不应该选择同一个节点吗?当我执行后一个操作时,我得到一个“System.NullReferenceException:对象引用未设置为对象的实例”。@dll32-在第二个XPath中,您试图获取一个直接的测试子节点。如果一个不存在,NullReferenceException
。在第一个示例中,您选择了文档中具有id
属性的所有test
节点。当然,但在我的id=“1”示例中,两个示例应获得相同的节点。可能在其他地方有错误。@dll32-根节点在文档中称为root
。您可以使用XPath开头的/
或按名称引用它。这应该可以使用/root/test[@id='“+currentid.ToString()+”]
或者,如果它们可以深入嵌套在当前节点中,您可以使用//a
。哦,这让我更接近解决方案。为什么我使用XmlNode currentlyselectedtestnode=Doc.SelectNodes(“//test[@id='”+currentid.ToString()+”)会有区别;或者XmlNode currentlyselectedtestnode=Doc.SelectNodes(“test[@id=”“+currentlid.ToString()+”]);它不应该选择同一个节点吗?当我执行后一个操作时,我得到一个“System.NullReferenceException:对象引用未设置为对象的实例”。@dll32-在第二个XPath中,您试图获取一个直接的测试子节点。如果一个不存在,NullReferenceException
。在第一个示例中,您选择了文档中具有id
属性的所有test
节点。当然,但在我的id=“1”示例中,两个示例应获得相同的节点。可能在其他地方有错误。@dll32-根节点在文档中称为root
。您可以使用XPath开头的/
或按名称引用它。这应该可以工作/root/test[@id='“+currentid.ToString()+”]