2 개의 XML 파일을 코드의 문자열로 병합하려고합니다.XSL 변환 - 요소 병합
<Root>
<AMA>
<Profile>
<UniqueID id="3"/>
<Name type="UN">TOTO</Name>
<Address>AAA</Address>
</Profile>
<Profile>
<UniqueID id="4"/>
<Name>TOTA</Name>
<Address>BBB</Address>
</Profile>
<Profile>
<UniqueID id="5"/>
<Name>TOTQ</Name>
</Profile>
<Profile>
<UniqueID id="6"/>
<Name>TOTG</Name>
</Profile>
<Profile>
<UniqueID id="7"/>
<Name>TOTB</Name>
<Address>CCC</Address>
</Profile>
</AMA>
<External>
<Profile>
<UniqueID id="3"/>
<Miles>5</Miles>
</Profile>
<Profile>
<UniqueID id="4"/>
<Miles>4</Miles>
<Points>22222</Points>
</Profile>
<Profile>
<UniqueID id="5"/>
<Miles>3</Miles>
</Profile>
<Profile>
<UniqueID id="6"/>
<Miles>2</Miles>
</Profile>
<Profile>
<UniqueID id="7"/>
<Miles>1</Miles>
</Profile>
</External>
</Root>
나는 내가 좋아하는 뭔가를 작성하는 관리
<?xml version="1.0" encoding="ISO-8859-1"?>
<Root>
<Profile>
<UniqueID id="3"/>
<Name type="UN">TOTO</Name>
<Address>AAA</Address>
<Miles>5</Miles>
</Profile>
<Profile>
<UniqueID id="4"/>
<Name>TOTA</Name>
<Address>BBB</Address>
<Miles>4</Miles>
<Points>22222</Points>
</Profile>
<Profile>
<UniqueID id="5"/>
<Name>TOTQ</Name>
<Miles>3</Miles>
</Profile>
<Profile>
<UniqueID id="6"/>
<Name>TOTG</Name>
<Miles>2</Miles>
</Profile>
<Profile>
<UniqueID id="7"/>
<Name>TOTB</Name>
<Address>CCC</Address>
<Miles>1</Miles>
</Profile>
</Root>
가져올 :
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes" />
<Root>
<xsl:template match="/Root/AMA/Profile">
<Profile>
<xsl:for-each select=".">
<xsl:copy-of select="@*|node()"/>
<xsl:copy-of select="/Root/External/Profile/UniqueID[@id=current()/UniqueID/@id]/../(Miles|Points)"/>
</xsl:for-each>
</Profile>
</xsl:template>
<xsl:template match="/root/External"/>
</xsl:transform>
</Root>
방법은 프로파일 노드를 "하드 코딩"피할 수있다? 는 XML 변환의 프로필 요소 태그 개방 및 폐쇄 내 손을 넣어하지만, 그냥 원래 하나에서 프로필 노드를 복사하지 "내 말은"하드 코딩 "으로
.
그것은 다른 방법을 보인다사용하여 존재 XSLT Lookup Tables 및 here ...하지만 조금 지나친 것 같습니다.
당신이 더 나은 솔루션이 있다고 생각합니까?
으로 변경할 수 있습니까? "프로필 노드를 하드 코딩"이란 무엇입니까? –
나는 당신이 무엇을 요구하고 있는지 정말로 확신하지 못합니다. 여러분이 사용하는 두 개의 문서가 아닌 하나의 입력 문서를 보여 주었고 병합 작업을 수행하기를 원하는 것에 대한 좋은 설명을 제공하지 못했습니다. 그리고 @KirillPolishchuk에 동의합니다. "프로파일 노드 하드 코딩"의 의미가 명확하지 않습니다. 현재 접근 방식으로는 할 수없는 일을하고 싶습니다. 또한 스타일 시트가 잘못 작성되었음을 유의하십시오. 루트 요소가 올바르게 중첩되지 않으며 루트 노드 템플릿이 일치 프로세스를 시작하지 않지만 템플릿이 있으므로 풀 스타일 스타일 시트가 아닙니다. 문제를 중지하고 정의하십시오. – keshlam
예, 더 나은 해결책이 있습니다 : ** 키 **를 사용하여 외부 값을 조회하십시오. 아니요, "프로필 노드 *"를 하드 코딩하지 않아도됩니다. 요청의이 부분은 분명하지 않습니다. 다른 사람들이 이미 지적했듯이. - 또한'는 아무 것도하지 않는다. –