从DOM中的XML文件中删除数据?

时间:2011-07-16 15:08:36

标签: java xml xml-serialization xsd

是否有一种简单的方法(可能使用DOM api或其他)我可以从XML文件中删除实际数据,只留下其模式的一种模板,以便我们可以看到它的潜在信息可以坚持。

我会举一个例子,说清楚。

考虑用户输入以下xml文件:

<photos page="2" pages="89" perpage="10" total="881">
    <photo id="2636" owner="47058503995@N01" 
        secret="a123456" server="2" title="test_04"
        ispublic="1" isfriend="0" isfamily="0" />
    <photo id="2635" owner="47058503995@N01"
        secret="b123456" server="2" title="test_03"
        ispublic="0" isfriend="1" isfamily="1" />
    <photo id="2633" owner="47058503995@N01"
        secret="c123456" server="2" title="test_01"
        ispublic="1" isfriend="0" isfamily="0" />
    <photo id="2610" owner="12037949754@N01"
        secret="d123456" server="2" title="00_tall"
        ispublic="1" isfriend="0" isfamily="0" />
</photos>

然后我想将其转换为:

<photos page=“..." pages=“..." perpage=“..." total=“...">
    <photo id=“.." owner=“.." 
        secret=“..." server=“..." title=“..."
        ispublic=“..." isfriend=“..." isfamily=“...” />
</photos>

我确信这可以手动编写,但这将是最好,最有效和最可靠的方法。 (最好是用Java)。

日Thnx!

3 个答案:

答案 0 :(得分:1)

不要使用自己必须在结构中迭代的DOM API,而是看一下SAX API,它会自我迭代并为每个元素,文本节点等回调。对于每个元素你得到回叫,你也会得到一组属性。

你仍然需要确定输出什么,减少重复等。但是你也得到了一个元素结束的回调,所以也许记录你得到的所有内容,然后记录你的元素结尾回调,只需确定您想要输出的唯一数据集。

答案 1 :(得分:1)

有很多可能性:

  • DOM API(包含在JDK中)
  • SAX API(包含在JDK中)
  • JDOM(易于使用,但外部)
  • XSLT(使用准备好的XSL样式表转换XML,JDK支持XSLT 1.0)

我认为XSLT是将XML转换为另一种XML的最可靠和通用的方法。这是一个简单的例子:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:strip-space elements="*"/>
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/>

    <xsl:template match="node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()[position()=1]"/>
        </xsl:copy>     
    </xsl:template>

    <xsl:template match="@*">
        <xsl:attribute name="{name()}">...</xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

结果:

<photos page="..." pages="..." perpage="..." total="...">
   <photo id="..." owner="..." secret="..." server="..." title="..." ispublic="..."
          isfriend="..."
          isfamily="..."/>
</photos>

答案 2 :(得分:0)

您可以使用大量的XML解析器来完成这项工作。如果您对学习感兴趣,请尝试使用XmlBeans或JAXB。这些API为您提供了大量的控制和验证。此外,您还可以从XSD学习XSD和生成java类。使用这些API,解析和写入XML文件也相当容易。以下是一些有用的链接,

XmlBeans

JAXB 2.0