이 변환 패턴 일치 : 그것은 이미 <site>
요소의 자식 아닌 경우에만
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[not(self::site)]/Project">
<site>
<xsl:call-template name="identity"/>
</site>
</xsl:template>
</xsl:stylesheet>
가 요소 <Project>
랩. 이 XML 문서에 적용
: 올바른 원한 결과가을 생산
<t>
<Project>x</Project>
<site>
<Project>y</Project>
</site>
</t>
:
<t>
<site>
<Project>x</Project>
</site>
<site>
<Project>y</Project>
</site>
</t>
좋은 질문 (+1). 완전하고 간단한 솔루션에 대한 내 대답을 참조하십시오. –
XSLT가이 특정 문제에 대한 최상의 솔루션이 아닐 수도 있습니다. XSLT는 기본적으로 기존 XML 문서와 스타일 시트를 기반으로 완전히 새로운 XML 문서를 생성하지만,이 경우 단순히 기존 문서를 조작하는 것이 바람직 할 수 있습니다. C#에서는 현재 자식 노드를 제거하는 것이 쉽고, ''태그를 넣고 새 요소의 자식으로 다시 추가합니다. –
Flynn1179
나는 다른 방법을 통해 더 쉽게되는 것에 대한 의견을 이해합니다. 이 앱은 이미 여러 변형을 사용하여 기존 입력 또는 잘못된 입력을 업그레이드합니다. – Mykro