【问题标题】:How to rewrite xml file in Java如何用Java重写xml文件
【发布时间】:2013-12-29 09:18:37
【问题描述】:

我想重写 XML 文件的一小部分。

这个想法是,我可以处理如下情况:

<Line>
     <P Name="Src">5</P>
     <P Name="Dst">4</P>
</Line>

但是,有时,XML 文件包含一些类似这样的信息:

<Line>
    <P Name="Src">2</P>
    <P Name="Points">[3, 0]</P>
    <Branch>
      <P Name="Points">[0, 8]</P>
      <P Name="Dst">5</P>
    </Branch>
    <Branch>
      <P Name="Dst">3</P>
    </Branch>
</Line>

我想要的很简单,我想把上面右边的信息改写成开始模式:

1)。删除&lt;P Name="Points"&gt;[*,*]&lt;/P&gt;

2)。将&lt;P Name="Src"&gt;*&lt;/P&gt; 放入每个&lt;Branch&gt;

3)。把&lt;Branch&gt;改成&lt;Line&gt;

预期结果将是:

<Line>
     <P Name="Src">2</P>
     <P Name="Dst">5</P>
</Line>
<Line>
     <P Name="Src">2</P>
     <P Name="Dst">3</P>
</Line>

是否有任何建议或建议这样做

谢谢

【问题讨论】:

  • 我建议阅读 SAX。这是解决这个问题的明显工具。
  • Xslt 非常适合这种转换。
  • @DavidWallace SAX 与 DOM 有什么不同吗?
  • @MGorgon xslt 是否可用于 xml 到 xml 的转换?
  • 当然,xslt 代表“XML 转换”。它是为此而生的。

标签: java xml rewrite


【解决方案1】:

这是一个可以完成这项工作的 XSLT。您可能需要调整何时包含或排除 &lt;P&gt; 元素的条件,这里它仅排除在其文本节点中具有 [ 字符的 &lt;P&gt; 元素。

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <!-- By default, copy everything -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()" />
        </xsl:copy>
    </xsl:template>

    <!-- Special processing for Line elements that has one or more Branch children -->
    <xsl:template match="Line[count(Branch) > 0]">
        <xsl:apply-templates select="Branch" />
    </xsl:template>

    <!-- Special processing for Branch elements -->
    <xsl:template match="Branch">
        <Line>
            <xsl:apply-templates select="../P[not(contains(., '['))]" />
            <xsl:apply-templates select="P[not(contains(., '['))]" />
        </Line>
    </xsl:template>

</xsl:stylesheet>

另请注意,此 XSL 假定 &lt;Branch&gt;element 只能作为 &lt;Line&gt;element 的直接子元素出现。

【讨论】:

  • 非常感谢,稍后我会反馈给您的。
猜你喜欢
  • 2023-02-05
  • 2012-03-29
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 2016-08-15
  • 2018-12-30
  • 2023-03-29
  • 2012-11-19
相关资源
最近更新 更多