我试图将位置中的值分配给字符串。我无法弄清楚如何设置此属性部分。
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的数据。 FirstChild位置有一个看起来像这样的属性。
<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>
答案 0 :(得分:0)
我在下面看到了你的评论。然后你可以圈出所有节点,当你找到你用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;
}
}
答案 1 :(得分:0)
您可以按标记选择节点并获取ID属性的值。
XmlNode childNode = parentNode.SelectSingleNode("DATA");
if (childNode!= null)
{
type = childNode.Attributes["ID"].Value;
}
答案 2 :(得分:0)
使用XML的这个小片段,我只能建议使用SelectSingleNode()
这样的通用XPath:
string xpath = String.Format("//DATA[@ID='{0}'", RefID1);
string state = myXmlDocument.SelectSingleNode(xpath).InnerText;
高于XPath意味着在xml文档中的任何级别选择<DATA>
元素,其属性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
类似,而/preceding-sibling
与PreviousSibling
类似。