0

我有一个名为 word.xml 的 XML 文件,其中包含

<A> 
<Answer>How was you day</Answer> 
<Question>Happy day </Question>
<Biased> good morning </Biased>
<abc>..............</abc>
.
. // few more tags here
.
</A>

现在我想提取另一个名为 word1.xml 的 XML 文件,其中包含 word1.xml 的一部分

<A> 
<Answer>How was you day</Answer> 
<Question>Happy day </Question>
</A>

到目前为止我尝试过的 Java 代码

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class ReadXMLFile {

public static void main(String args[]) {
try {

File stocks = new File("word.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(stocks);
doc.getDocumentElement().normalize();

System.out.println("root of xml file" + doc.getDocumentElement().getNodeName());
NodeList nodes = doc.getElementsByTagName("A");
System.out.println("==========================");

for (int i = 0; i < nodes.getLength(); i++) {
Node node = nodes.item(i);
System.out.println("i value---"+i);
System.out.println(nodes.getLength());
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element element = (Element) node;
System.out.println(element.getTextContent());
//element.getElementsByTagName(name)
File statText = new File(i+".txt");
FileOutputStream is = new FileOutputStream(statText);
OutputStreamWriter osw = new OutputStreamWriter(is);    
Writer w = new BufferedWriter(osw);
w.write("<Answer>");
w.write(element.getElementsByTagName("Answer").item(0).getTextContent());
w.write("</Answer>");
w.write("Question");
w.write(element.getElementsByTagName("Question").item(0).getTextContent());
w.write("</Question>");
w.close();
}
}
}
catch (Exception ex) {
ex.printStackTrace();
}

private static String getValue(String tag, Element element) {
NodeList nodes = element.getElementsByTagName(tag).item(0).getChildNodes();
Node node = (Node) nodes.item(0);
return node.getNodeValue();
}
}
}

我只想在我的结果中包含标签。这是 DIRTY 的做法。你能建议我最好的方法吗?需要帮助。提前致谢。

4

3 回答 3

2

如果 Java 不是这里的强制约束,您可以使用 XSLT 来实现。这很容易理解。你可以在这里找到一些指导:链接

我自己实践的一个例子:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
    <xsl:for-each select="//title">
        <article>
            <title> 
                <xsl:value-of select="./name/>
                <xsl:text> : </xsl:text>
                <xsl:value-of select = "./number/>
            </title>
            <references>
                <xsl:value-of select = "reference"/>
            </references>
        </article>
    </xsl:for-each> 
</xsl:template>

希望能帮助到你!

于 2013-09-10T14:05:13.843 回答
1

就像 BeginnerJava 解释的那样,XSL 是最合适的技术,因为您正在将一棵 XML 树转换为另一棵 XML 树,而 XSL 就是为此而设计的。在 XSL 中,实现您所描述的代码所需的代码将是(我跳过了一些位):

<xsl:template match="A">
    <xsl:copy>
      <xsl:apply-templates select="Answer|Question"/>
    </xsl:copy>
</xsl:template>

您可以从 Java 代码或命令行调用 XSL 转换,如下所示:

java  net.sf.saxon.Transform   [options]   source-document   stylesheet   [ params…]
于 2013-09-10T14:22:42.540 回答
0

使用 DocumentParser 将 xml 解析为 DOM。从生成的文档中删除不需要的元素。使用 Transformer 将修改后的文档写入新文件。(请注意,每个步骤的详细信息都可以在成千上万的在线 java xml 教程中找到)。

于 2013-09-10T14:15:56.093 回答