2012-03-05 21 views
1

以下是XML結構 -Java的XPath來產生親子(S)結構

<Projects> 
    <Project> 
    <Name>Web Site Designing</Name> 
    <Members> 
     <MName>Jack</MName> 
     <MName>John</MName> 
     <MName>Jill</MName> 
    </Members> 
    </Project> 
    <Project> 
    <Name>Site Ranking</Name> 
    <Members> 
     <MName>Jack</MName> 
     <MName>James</MName> 
    </Members> 
    </Project> 
    <Project> 
    <Name>E-Mailing</Name> 
    <Members> 
     <MName>Matt</MName> 
    </Members> 
    </Project> 
<Projects> 

會有什麼XPath查詢,以獲得在Java中下面的輸出 -

Web Site Designing,Jack,John,Jill 
Site Ranking,Jack,James 
E-Mailing,Matt 

權現在我使用的Java代碼並沒有這樣做。請在下面找到Java代碼 -

....... 
....... 
....... 
String pName = ""; 
String mName = ""; 
Document doc = builder.parse("Project.xml"); 
XPath xpath = XPathFactory.newInstance().newXPath(); 
XPathExpression expr = xpath.compile("//Projects/Project"); 
Object result = expr.evaluate(doc, XPathConstants.NODESET); 
NodeList nodes = (NodeList) result; 
BufferedWriter out = new BufferedWriter(new FileWriter("projInfo.txt")); 
Node node; 
for (int i = 0; i < nodes.getLength(); i++) 
{ 
    node = nodes.item(i); 
    pName = xpath.evaluate("Name",node); 
    mName = xpath.evaluate("Members/MName",node); 

    //Here's something worng 
    out.write(pName + "," + mName + "\r\n"); 
} 
out.close(); 
.......  

有一個愉快的一天,JB

回答

1

MNAME = xpath.evaluate( 「會員/ MNAME」,節點);

這將返回一個節點列表,但在接下來的代碼行:

out.write(pName + "," + mName + "\r\n"); 

你是把它當作一個字符串。

處理mName中包含的所有節點通過mName迭代將是正確的。

+0

oooppsss ..是的,你完全正確..非常感謝。:) – John 2012-03-05 05:07:00

+0

@約翰:不客氣。 – 2012-03-05 13:39:08