0

以下を実現する XSLT を教えてください。

入力:

<alfa data="abc" xmlns="http://test1.com/">
  <mus:beta xmlns:mus="http://test2.com">
    <mus:a>1234567897</mus:a>
    <mus:s>777666</mus:s>
  </mus:beta>
</alfa>

出力は次のようになります。

<alfa data="abc" xmlns="http://test1.com/">
  <beta xmlns="http://test2.com">
    <a>1234567897</a>
    <s>777666</s>
  </beta>
</alfa>

実際には; 入力は XmlBeans で生成されます。xmlbeans で出力を達成できません。したがって、仲介で xslt を使用して変換を行います。ただし、最初に xslt が必要です:) XmlBeans ソリューションも受け入れられます。:)

xmlbeans ユーザー向け。以下は機能しません、fyi:

Map map = new HashMap();
 map.put("http://test1.com/",""); 
 map.put("http://test2.com/","");
 xo.setSaveSuggestedPrefixes(map);

乾杯、カーン

4

2 に答える 2

1

スタイルシートは次のとおりです。

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:mus="http://test2.com"
  exclude-result-prefixes="mus"
  version="1.0">

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

<xsl:template match="mus:*">
  <xsl:element name="{local-name()}" namespace="namespace-uri()}">
     <xsl:apply-templates select="@* | node()"/>
  </xsl:element>
</xsl:template>

</xsl:stylesheet>
于 2012-06-08T10:22:27.607 に答える
1

ドキュメントに名前空間宣言を明示的に追加すると、XmlBeans はそれを尊重します。XmlCursor APIを使用して、ドキュメントの途中に新しい既定の名前空間を追加できます。例えば、

    XmlObject xobj = XmlObject.Factory.parse(
            "<a xmlns='testA'>\n" +
            "  <B:b xmlns:B='testB'>\n" +
            "    <B:x>12345</B:x>\n" +
            "  </B:b>\n" +
            "</a>");

    // Use xpath with namespace declaration to find <B:b> element.
    XmlObject bobj = xobj.selectPath(
            "declare namespace B='testB'" +
            ".//B:b")[0];

    XmlCursor cur = null;
    try
    {
        cur = bobj.newCursor();
        cur.removeAttribute(new QName("http://www.w3.org/2000/xmlns/", "B"));
        cur.toNextToken();
        cur.insertNamespace("", "testB");
    }
    finally
    {
        cur.dispose();
    }

    System.out.println(xobj.xmlText());
于 2012-06-08T16:09:59.487 に答える