문제

이름이없는 요소가있는 XML 문서가 있으며 XSLT를 사용하여 네임 스페이스를 추가하고 싶습니다. 대부분의 요소는 네임 스페이스 A에 있습니다. 일부는 네임 스페이스 B에있을 것입니다. 어떻게해야합니까?

도움이 되었습니까?

해결책

foo.xml로

<foo x="1">
    <bar y="2">
        <baz z="3"/>
    </bar>
    <a-special-element n="8"/>
</foo>

및 foo.xsl

    <xsl:template match="*">
        <xsl:element name="{local-name()}" namespace="A" >
            <xsl:copy-of select="attribute::*"/>
            <xsl:apply-templates />
        </xsl:element>
    </xsl:template>

    <xsl:template match="a-special-element">
        <B:a-special-element xmlns:B="B">
            <xsl:apply-templates match="children()"/>
        </B:a-special-element>
    </xsl:template>

</xsl:transform>

나는 얻다

<foo xmlns="A" x="1">
    <bar y="2">
        <baz z="3"/>
    </bar>
    <B:a-special-element xmlns:B="B"/>
</foo>

그게 당신이 찾고있는 것입니까?

다른 팁

이 레시피에는 두 가지 주요 성분이 필요합니다.

소스 재고는 신원 변환, 그리고 주요 풍미는 namespace 속성 xsl:element.

테스트되지 않은 코드는 다음을 추가해야합니다 http://example.com/ 모든 요소에 대한 네임 스페이스.

<xsl:template match="*">
  <xsl:element name="xmpl:{local-name()}" namespace="http://example.com/">
    <xsl:apply-templates select="@*|node()"/>
  </xsl:element>
</xsl:template>

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

개인 메시지 : 안녕하세요, Jeni Tennison. 나는 당신이 이것을 읽고 있다는 것을 알고 있습니다.

지금까지 내가 가지고있는 것은 다음과 같습니다.

<xsl:template match="*">
    <xsl:element name="{local-name()}" namespace="A" >
        <xsl:apply-templates />
    </xsl:element>
</xsl:template>

<xsl:template match="a-special-element">
    <B:a-special-element xmlns:B="B">
      <xsl:apply-templates />
    </B:a-special-element>
</xsl:template>

이것은 거의 작동합니다. 문제는 속성을 복사하지 않는다는 것입니다. 내가 읽은 내용에서, xsl : element는 요소의 모든 속성을 as-is의 모든 속성을 복사 할 수있는 방법이 없습니다 (사용-입학장 세트는 그것을 잘라내는 것처럼 보이지 않습니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top