2013-04-05 70 views
0

我輸入XML:的XPath成的LINQ到XML

.... 
    <node Attribute1 = "GUID1"> 
     <childnode1 AttributeChildnode= var1> </childnode> 
     <childnode2 AttributeChildnode= var2> </childnode> 
    </node> 
    <node Attribute1 = "GUID2"> 
     <childnode3 AttributeChildnode= var3> </childnode> 
     <childnode4 AttributeChildnode= var4> </childnode> 
    </node> 
.... 

我XPath的代碼看起來像這樣

mynodelist = xmldoc.SelectNodes(".//node[@Attribute1 ='" & varString1 &'']/nodechild[@AttributeChildnode1 = ''& varString2 &'']") 

我不知道怎麼的LINQ to XML代碼看起來應該得到相同的結果 有人可以幫我

回答

0

你仍然可以使用XPath使用XDocument和LINQ to XML;

var doc = XDocument.Load(filePath); 
var myNodeList = doc.XPathSelectElements(".//node[@Attribute1 ='" & varString1 &'']/nodechild[@AttributeChildnode1 = ''& varString2 &'']"); 

XPathSelectElements被聲明爲可拓方法XNodeSystem.Xml.XPath命名空間內。

標準的LINQ to XML版本

輸入XML:

<root> 
    <node Attribute1="GUID1"> 
     <childnode AttributeChildNode1="var1" AttributeChildNode2="result1"></childnode> 
     <childnode AttributeChildNode1="var2" AttributeChildNode2="result2"></childnode> 
    </node> 
    <node Attribute1="GUID2"> 
     <childnode AttributeChildNode1="var3" AttributeChildNode2="result3"></childnode> 
     <childnode AttributeChildNode1="var4" AttributeChildNode2="result4"></childnode> 
    </node> 
</root> 

查詢:

string guid = "GUID1"; 
string var = "var1"; 

var elements = XElement.Load("Input.txt"); 

var value = (from node in elements.Elements("node") 
      where (string)node.Attribute("Attribute1") == "GUID1" 
      from childNode in node.Elements() 
      where (string)childNode.Attribute("AttributeChildNode1") == "var1" 
      select (string)childNode.Attribute("AttributeChildNode2")).FirstOrDefault(); 

返回result1 - result4,取決於​​和var變量的值。

+0

是否有可能沒有XpathSelectElements? e.x. dim var as IEnumerable(of Xelement) var =從..............選擇虛擬位置..... select dummy – d1chty 2013-04-05 12:52:24

+0

我很確定它是,但是可以嗎?發佈輸入XML和期望的輸出? – MarcinJuraszek 2013-04-05 12:54:26

+0

輸入 '代碼 .... <節點ATTRIBUTE1 = 「GUID1」> <節點ATTRIBUTE1 = 「GUID2」> .... ' 期望的輸出可以是VAR1,VAR2,VAR3或var4基於用戶的選擇。對不起,無法格式化文本正確 – d1chty 2013-04-05 13:04:39