원자 포맷터는 네임 스페이스 인라인을 여러 번 지정하는 것처럼 보입니다.
쉽게 이러한 방법으로 을 통합 할 수 있습니까? 아래 예제는 각 속성에 대해 세 번 지정된네임 스페이스를 보여줍니다. 이것은 끔찍한 일입니다.
이보다 컴팩트 한 형식을 생산하는 가장 쉬운 방법은 당신의 XML 문서에서 다음 XSLT 변환을 적용하는 것입니다 : 예를 들어
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()[not(self::*)]|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}" namespace="{namespace-uri()}">
<xsl:copy-of select="descendant::*/namespace::*"/>
<xsl:copy-of select="namespace::*"/>
<xsl:apply-templates select="node()|@*"/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
, 다음과 같은 XML 문서에 적용 (기반 귀하의 질문에) :
<t xmlns="http://a9.com/-/opensearch/extensions/property/1.0/">
<property p3:name="firstname"
xmlns:p3="http://a9.com/-/opensearch/extensions/property/1.0/"
xmlns="http://a9.com/-/opensearch/extensions/property/1.0/"
>Drikie</property>
</t>
원하는 결과는 produc입니다. 에드 :
<t
xmlns="http://a9.com/-/opensearch/extensions/property/1.0/"
xmlns:p3="http://a9.com/-/opensearch/extensions/property/1.0/">
<property p3:name="firstname">Drikie</property>
</t>
이주의 마십시오
네임 스페이스 선언이 다른 네임 스페이스에 같은 접두사를 결합하는 선언이있는 요소 위에 더 승진 할 수없는
. 모든 네임 스페이스 노드가 모든 네임 스페이스에 필요하지 않을 수도 있습니다 일부는 모든 하위 노드, 아래로 전파되기 때문에, 구문 분석 된 XML 문서의 크기를 증가시킬 수 상위 요소에 네임 스페이스 선언을 추진
.
좋은 질문, +1. 하나의 쉬운 솔루션에 대한 내 대답을 참조하십시오. :) –