我试了几个小时,但没有具体的解决方案。XML解析和LINQ对我来说很复杂。
有人能帮我知道特定祖先节点的名称吗?其中包括具有特定值的孙节点?
有R1、R2、R3、R4……我想知道哪个R有值为201404418 的B7孙子
在我的例子中,祖先的名字不是重复的,而是有数字变量需要识别。
此外,为了利用已经下载的XDocument对象并提高性能,请仅使用XDocument。
<?xml version="1.0" encoding="utf-8"?>
<RESULT>
<ITEM>
<R1>
<B DESC="product">
<B1> chocolate </B1>
<B2> white </B2>
<B3> Kisses </B3>
<B4> bar type </B4>
<B5> 2 $ </B5>
<B6>2014-09-26 </B6>
<B7>201404418 </B7>
</B>
<C DESC="ingredient">
<CR1>
<C1>cacao paste </C1>
<C2> concentrated </C2>
<C3> 21.69 </C3>
<C4> gram </C4>
</CR1>
<CR2>
<C1> strawberry cream </C1>
<C2> normal </C2>
<C3> 10 </C3>
<C4> gram </C4>
</CR2>
<CR3>
<C1> almond & nut </C1>
<C2> dried product </C2>
<C3> 10 </C3>
<C4> gram </C4>
</CR3>
</C>
<D DESC="basic informations of product">
<D1>http://food.tfda.go.tn/html/bxmPdfViewer.jsp?docid=145977782405945000134</D1>
<D2>http://food.tfda.go.tn/html/bxmPdfViewer.jsp?docid=145971282405945000164</D2>
<D3>http://food.tfda.go.tn/html/bxmPdfViewer.jsp?docid=145979082424311500014</D3>
<D6>http://www.food.tn/images/insert_pdf/IN_2014091700002_00.pdf</D6>
</D>
<E DESC="storage">
<E1> room temperature </E1>
<E2> 36 months from manufacturing date </E2>
<E5> in-house packaging unit </E5>
<E6> 1 $/unit </E6>
</E>
<F DESC="production record">
<FR1>
<F1>2014</F1>
<F2>0</F2>
<F3>0</F3>
<F4>0</F4>
<F5>161,816</F5>
<F7>161,816</F7>
</FR1>
<FR2>
<F1>2015</F1>
<F2>469,591</F2>
<F3>466,147</F3>
<F4>473,315</F4>
<F5>612,964</F5>
<F7>2,022,017</F7>
</FR2>
</F>
<G DESC="import record"></G>
</R1>
</ITEM>
</RESULT>
您可以使用Linq
到Xml
,查找具有匹配条件的元素并获取它的Parent
XDocument doc = XDocument.Load(filename);
var parent = doc.Descendants()
.Elements("B7") // look for element
.FirstOrDefault(x=>(string)x.Value == "201404418")
.Parent; // Parent.
检查此Demo
这将帮助您解决troubleshooting
问题,并有望解决问题。
XML示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<record>
<R1>
<B DESC="product">
<B1> chocolate </B1>
<B2> white </B2>
<B3> Kisses </B3>
<B4> bar type </B4>
<B5> 2 $ </B5>
<B6>2014-09-26 </B6>
<B7>201404418 </B7>
</B>
</R1>
</record>
这样的事情应该会让你走上正确的道路;
//Parse XML to XElement
var xmlObject = XElement.Parse(TypeOfBill2014);
var result = xmlObject.Elements("B")
.Where(x => (string)x.Element("B7") == 201404418)
.Select(x => x.Parent)
.FirstOrDefault();
以下是的一些链接;
- 如何从XML和LINQ开始
- MSDN XElement
- SO示例
供进一步阅读。