2017-06-14 50 views
0

我有一個xml文件,其格式是動態生成的。XPath使用iTextSharp和C#

<emp> 
    <id>1</id> 
    <Name>aaa</Name> 
    <Age>20</Age> 
</emp>  
<emp> 
    <id>2</id> 
    <Name>bbb</Name> 
    <Age>25</Age> 
</emp> 
<emp> 
    <id>3</id> 
    <Name>ccc</Name> 
    <Age>30</Age> 
</emp> 

我想從XML文檔中選擇名稱元素。根據emp發生的次數,我使用下面的代碼。

對於單出現時下面的代碼工作正常..

XMLDocument.SelectSingleNode("//t:*[@name='" + Name + "']"); 

對於多個EMP發生,通過重複的元素循環。下面的代碼不起作用。

XMLDocument.SelectNodes("//t:*[@name='emp[" + i + "]/" + Name + "']"); 

請在我的代碼中提出任何建議或更正。

+0

使用'SelectNodes'時不要使用'Name'屬性,因爲您獲得了具有該ID的所有節點的集合。在這種情況下,'Name'必須與'id'關聯。 –

+0

不好運,請你舉個例子。 – BRR

回答

0
XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.Load("xmlFileLocation"); 
int id = 2; //Required input from the user 
XmlNode idNode = xmlDoc.SelectSingleNode("//emp/id[.=" + "'" + id + "']"); 
if(idNode != null) 
    Console.WriteLine("Employee " + idNode.InnerText + " has name : " + idNode.ParentNode.SelectSingleNode("Name").InnerText); 

輸出是:

Employee 2 has name : bbb 

它的工作原理是:爲id = 2的XPath就在id節點,並從那裏到父,並獲得名字。

+0

我的要求並非針對所有員工,而僅限於我的價值。 例如,當我是2時,我只需要第二個emp的名字。 – BRR

+0

@RonaldBravo我編輯了答案。 – SomeDude