[英]How to list the Node text & Attribute using Java and XPath?
下面是我收到的XML文件 -
<Seminars>
<Seminar>
<Venue P="ABC" dt="20111223"/>
<Subject name="Finance">
<Topic main="Bonds"/>
<Topic main="Stocks" sub="Technical Analysis"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="ABC" dt="20111225"/>
<Subject name="Yoga">
<Topic main="Benefits"/>
</Subject>
<Subject name="Meditation">
<Topic main="Benefits"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="PQR" dt="20111220"/>
<Subject name="IT">
<Topic main="Java" sub="Swing"/>
<Topic main="Java" sub="NIO"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="ABC" dt="20111224"/>
<Subject name="Medical">
<Topic main="Plastic Surgery"/>
<Topic main="Mal-nutrition"/>
</Subject>
<Subject name="IT">
<Topic main="Java" sub="Collections"/>
<Topic main="Web Technologies"/>
</Subject> </Seminar>
<Seminar>
<Venue P="XYZ" dt="20111226"/>
<Subject name="IT">
<Topic main="DotNET - I"/>
<Topic main="DotNET - II"/>
<Topic main="XML" sub="Security"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="XYZ" dt="20111227"/>
<Subject name="IT">
<Topic main="Oracle"/>
<Topic main="Oracle" sub="JDeveloper"/>
</Subject>
</Seminar>
</Seminars>
我希望輸出為 -
Financial
- Bonds
- Stocks, Technical Analysis
Yoga
- Benefits
Meditation
- Benefits
IT
- Java, Swing
- Java, NIO
Medical
- Plastic Surgery
- Mal-nutrition
IT
- Java, Collections
- Web Technologies
IT
- Java - I
- Java - II
- XML, Security
IT
- Oracle, JDeveloper
- Oracle, Security
下面是我的Java代碼 -
public class Seminar
{
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, XPathExpressionException
{
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("seminar.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
// XPath Query for showing all nodes value
XPathExpression expr = xpath.compile("//Seminars/Seminar");
Object result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
//Writing to an output file
String tx = "";
BufferedWriter out = new BufferedWriter(new FileWriter("seminar.csv"));
Node node;
for (int i = 0; i < nodes.getLength(); i++)
{
node = nodes.item(i);
String subject = xpath.evaluate("Subject/@name",node);
String t = xpath.evaluate("Subject/Topic/@main",node);
String del = xpath.evaluate("Subject/Topic/@sub",node).toString();
//Writing to the CSV File
out.write(subject + "," + t + "," + del + "\r\n"); // + " - " + dod );
}
out.close();
}
}
我無法得到相同的輸出。 我正在嘗試使用XPATH和Java。 雖然我粘貼了一個簡單的Java程序,但我嘗試了許多XPath查詢的組合。 但是無法獲得所需的輸出。 我使用的是JDK 1.7。
請幫忙...
好問題,+ 1。
使用XSLT更容易 (只需從代碼調用XSLT轉換並輸出結果):
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:strip-space elements="*"/>
<xsl:template match="Subject">
<xsl:value-of select="concat('
',@name)"/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Topic">
<xsl:text>
 - </xsl:text>
<xsl:apply-templates select="@*"/>
</xsl:template>
<xsl:template match="@sub">
<xsl:value-of select="concat(', ', .)"/>
</xsl:template>
</xsl:stylesheet>
在提供的XML文檔上進行此轉換時 :
<Seminars>
<Seminar>
<Venue P="ABC" dt="20111223"/>
<Subject name="Finance">
<Topic main="Bonds"/>
<Topic main="Stocks" sub="Technical Analysis"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="ABC" dt="20111225"/>
<Subject name="Yoga">
<Topic main="Benefits"/>
</Subject>
<Subject name="Meditation">
<Topic main="Benefits"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="PQR" dt="20111220"/>
<Subject name="IT">
<Topic main="Java" sub="Swing"/>
<Topic main="Java" sub="NIO"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="ABC" dt="20111224"/>
<Subject name="Medical">
<Topic main="Plastic Surgery"/>
<Topic main="Mal-nutrition"/>
</Subject>
<Subject name="IT">
<Topic main="Java" sub="Collections"/>
<Topic main="Web Technologies"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="XYZ" dt="20111226"/>
<Subject name="IT">
<Topic main="DotNET - I"/>
<Topic main="DotNET - II"/>
<Topic main="XML" sub="Security"/>
</Subject>
</Seminar>
<Seminar>
<Venue P="XYZ" dt="20111227"/>
<Subject name="IT">
<Topic main="Oracle"/>
<Topic main="Oracle" sub="JDeveloper"/>
</Subject>
</Seminar>
</Seminars>
生成所需的正確輸出 :
Finance
- Bonds
- Stocks, Technical Analysis
Yoga
- Benefits
Meditation
- Benefits
IT
- Java, Swing
- Java, NIO
Medical
- Plastic Surgery
- Mal-nutrition
IT
- Java, Collections
- Web Technologies
IT
- DotNET - I
- DotNET - II
- XML, Security
IT
- Oracle
- Oracle, JDeveloper
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.