【问题标题】:How to construct an XML document out of an XPATH Java如何从 XPATH Java 中构造 XML 文档
【发布时间】:2017-08-25 04:54:49
【问题描述】:

我有以下 xpath:

/Parent/Children/child

我的目标是完全基于上面的 xpath 构建以下 XML 文档:

<Parent>
  <Children>
    <child></child>
  </Children>
</Parent>

如何使用 Java 实现我的目标?

【问题讨论】:

  • 您如何设想从 that XPath 创建 that XML?所有的价值从何而来?
  • "如何使用 Java 实现我的目标?" 解析 xpath 字符串,然后构建 XML 层次结构,例如使用 DOM,并将其输出到带有缩进的文本。您要问的是哪一部分?这些至少是 3 个不同的问题。
  • 我猜你提到的所有 3 个子问题。我想看看有人会如何实现我上面提出的问题。我通常使用 jaxb 或一些框架,但我希望看到此类任务的正确实现。
  • “我想看看有人会如何实现我上面提出的问题。” 所以这是一个“为我编写代码”请求?抱歉,这不是 StackOverflow 的工作方式。请阅读:What topics can I ask about here?.
  • 不,我有一个使用 jaxb 的实现,但是要为这样的问题编写很多代码。我想看看有人如何在不使用 jaxb 或其他框架的情况下实现这一点。

标签: java xml xpath xml-parsing jaxb


【解决方案1】:

这可以通过使用 xslt 转换来实现。 https://docs.oracle.com/javase/tutorial/jaxp/xslt/transformingXML.html

【讨论】:

    【解决方案2】:

    你可以试试这个:

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="2.0">
    
        <xsl:variable name="path" select="'/Parent/Children/child'"></xsl:variable>
    
        <xsl:template match="/">
            <xsl:call-template name="createstructure">
                <xsl:with-param name="xpath" select="$path"></xsl:with-param>
            </xsl:call-template>
        </xsl:template>
    
        <xsl:template name="createstructure">
            <xsl:param name="xpath" select="."/>
            <xsl:variable name="elementname">
                <xsl:choose>
                    <xsl:when test="contains($xpath, '/')">
                        <xsl:value-of select="substring-before(replace($xpath, '^/', ''), '/')"/>
                    </xsl:when>
                    <xsl:otherwise><xsl:value-of select="normalize-space($xpath)"/></xsl:otherwise>
                </xsl:choose>
            </xsl:variable>
            <xsl:element name="{$elementname}">
                <xsl:choose>
                    <xsl:when test="contains($xpath, '/')">
                        <xsl:call-template name="createstructure">
                            <xsl:with-param name="xpath" select="substring-after(replace($xpath, '^/', ''), '/')"/>
                        </xsl:call-template>
                    </xsl:when>
                </xsl:choose>
            </xsl:element>
        </xsl:template>
    
    </xsl:stylesheet>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      相关资源
      最近更新 更多