Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以从XML文件中的特定位置获取数据吗?_C#_Xml - Fatal编程技术网

C# 我可以从XML文件中的特定位置获取数据吗?

C# 我可以从XML文件中的特定位置获取数据吗?,c#,xml,C#,Xml,我正在尝试将位置中的值分配给字符串。我想不出如何设置这个的属性部分 string type = null; type = xmlNodeComplex4.ParentNode.ParentNode.ParentNode.PreviousSibling.PreviousSibling.PreviousSibling.FirstChild.NextSibling.FirstChild.Attributes["@ID"+ RefID1].FirstChild.NextSibling.NextSibl

我正在尝试将位置中的值分配给字符串。我想不出如何设置这个的属性部分

string type = null;

type = xmlNodeComplex4.ParentNode.ParentNode.ParentNode.PreviousSibling.PreviousSibling.PreviousSibling.FirstChild.NextSibling.FirstChild.Attributes["@ID"+ RefID1].FirstChild.NextSibling.NextSibling.FirstChild.InnerText;
这不管用。我有FirstChild.Attributes[“@ID”+RefID1]的部分不起作用。代码编译没有问题。。但是这条线被甩了,我得到了一个错误。我知道这是我试图访问属性部分的方式。我对[]中的数据尝试了许多不同的组合。有没有办法做到这一点,如果有的话,有没有人能告诉我正确的方向

RefID是一个包含如下数据的字符串_154。第一个子位置有一个如下所示的属性

<CATALOG>
  <OBJECTS>
    <REFS ID = "_150">
        <CITY>Centerville</CITY>
        <STATE>Ohio</STATE>
        <ZIP>45459</ZIP>
    </REFS>

    <REFS ID = "_154">
        <CITY>Troy</CITY>
        <STATE>Michigan</STATE>
        <ZIP>48083</ZIP>
    </REFS>

  </OBJECTS>
  <PLANT>
     <COMMON>Bloodroot</COMMON>
     <BOTANICAL>Sanguinaria canadensis</BOTANICAL>
     <ZONE>4</ZONE>
     <LIGHT>Mostly Shady</LIGHT>
     <PRICE>$2.44</PRICE>
     <RefID1>_0154</RefID1>

  </PLANT>
</CATALOG>

森特维尔
俄亥俄州
45459
特洛伊
密歇根
48083
血根
美洲血根草
4.
大部分是阴凉的
$2.44
_0154

我在下面看到了你的评论。然后,您可以圈出所有节点,当您使用RefID1->找到要查找的节点时,进入其子节点并获取类型

XmlNodeList xnList = xml.SelectNodes("/Element[@*]");
foreach (XmlNode xn in xnList)
{
  if(xn.Attributes["ID"].Value == RefID1)
  {
    string type = xn.FirstChild.NextSibling.NextSibling.FirstChild.InnerText;
  }
}

您可以通过标记选择节点并获取ID属性的值

XmlNode childNode = parentNode.SelectSingleNode("DATA");
if (childNode!= null)
{
   type = childNode.Attributes["ID"].Value;
}

有了这一小部分XML,我只能建议对常规XPath使用
SelectSingleNode()
,如下所示:

string xpath = String.Format("//DATA[@ID='{0}'", RefID1);
string state = myXmlDocument.SelectSingleNode(xpath).InnerText;
上面的XPath表示在xml文档的任何级别选择
元素,属性ID值等于
RefID1
的值

更新:

有了更新的XML,您可以尝试以下方法:

string xpath = String.Format("//REFS[@ID='{0}']/STATE", RefID1);
string data = myXmlDocument.SelectSingleNode(xpath).InnerText;
或者如果您确实需要查询与
xmlNodeComplex4
相关:

string xpath = String.Format("./../preceding-sibling::OBJECTS/REFS[@ID='{0}']/STATE", RefID1);
var state = xmlNodeComplex4.SelectSingleNode(xpath).InnerText;

您可以看到XPath
/…
类似于
ParentNode
/前面的同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同级同?您想要获取哪个节点?让我为您构建一个示例。
.ParentNode.ParentNode.ParentNode.PreviousSibling.PreviousSibling.PreviousSibling
太疯狂了。我需要使用该RefID1来获取数据。。我不需要属性的值。。属性引用ID为的节点,我需要它的子节点中的数据,我知道如何获取这些数据。我只需要通过正确的路径获取数据,就像我在问题中提出的代码一样。我只是添加了一些xml的示例代码,以使其更简单。假设我给出的代码的xmlNodeComplex4部分指向区域节点。。。所以我想进入状态节点。我可以这样做吗。。。XMLNoReFiel4.4.Pr.No.Br.SraveSigBr.FrestStd[RefID1]。FirstChild.NextSibling.InnerText?检查我的更新,我假定ID属性是唯一的(让我知道它不是),这样你就可以通过ID查询。或者你真的需要查询来考虑<代码> >代码>节点,用“代码> XMLNoReCopr4?怎么做?我来试试。。谢谢你的帮助。。如果我能让它工作。。我将勾选复选标记。。。再次感谢您的时间。我不需要该属性的ID值。我已经拥有该属性的值。。该值是一个名为RefID1的字符串。我想获取该节点的一个子节点的数据。看看我添加的示例。我想知道是否有一种方法可以在代码行中放置一些可以指向特定位置的东西。xmlNodeComplex4.ParentNode.PreviousSibling.FirstChild[REFID1].FirstChild.NextSib‌​ling.InnerText