일부 요소를 복사하고 일부 요소의 이름을 XML 파일에서 다른 XML 파일로 변경하는 XSLT 템플릿을 만들었습니다.XSLT를 사용하여 요소를 다른 위치로 이동
그러나 요소를 가져 와서 XML 구조의 다른 부분으로 이동하는 방법을 알아낼 수는 없습니다.
나는이 XML 변환 할 :
<Hosts>
<Clusters>
<Cluster>
<Nodes>
<WindowsHost/>
</Nodes>
</Cluster>
</Clusters>
</Hosts>
에 :
이<Hosts>
<WindowsHosts>
<WindowsHost/>
</WindowsHosts>
</Hosts>
내 현재 작업 XSLT가 포함
<xsl:template match="/">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:apply-templates select="*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:apply-templates select="*"/>
</xsl:template>
을 ... 그리고 반복 템플릿과 같은 :
<xsl:template match="/Hosts/Clusters/Cluster/Nodes/WindowsHost">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="/Hosts/Clusters/Cluster/Nodes/WindowsHost/SomeElement">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
등등. 모든 요소가 복사되지 않고 일부 요소 이름이 변경되기 때문에 복사 할 각 요소에는 자체 템플릿이 있습니다. 그러나 완전한 XPath가 아니라 요소 이름을 변경하는 데 성공했습니다.
도움을 주시면 감사하겠습니다.
바울은
는 귀하의 응답은 많이 감사합니다. 그러나 제 예제는 너무 단순한 것으로 생각합니다.
내 기존 XSLT에는 하나의 XML에서 다른 요소로 복사해야하는 모든 요소에 대한 템플릿이 있으므로 많은 템플릿 (약 1000 개)이 있으며 XSLT 파일의 시작 부분에서 어떤 요소도 기본적으로 아무 것도 발생하지 않습니다 . 짧은 이야기 만해도, 나는 당신의 대답에 기술을 시도하지 못했습니다. 아마도 내가 상황을 정확히 보여주지 않았기 때문입니다. 기존
- 복사로하지만 스키마에서 다른 위치로 요소 이름을
- 복사를 변경 :
요소에 대한 세 가지 시나리오가 복사되고있다 XSLT 파일은 # 1과 # 2 모두에서 작동합니다. 3 위입니다. 일할 수 없습니다. 여기에 XSLT의 이상이
<xsl:template match="/"> <xsl:apply-templates select="*"/> </xsl:template> <xsl:template match="/*"> <xsl:copy> <xsl:apply-templates select="*"/> </xsl:copy> </xsl:template> <xsl:template match="*"> <xsl:apply-templates select="*"/> </xsl:template> <xsl:template match="/SAN/ClientProfile"> <!-- copy element as is (working) --> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> <xsl:template match="/SAN/ClientProfile/Name"> <!-- copy element but change its name (working) --> <CompanyName> <xsl:apply-templates/> </CompanyName> </xsl:template> <xsl:template match="/SAN/EQLHosts/WindowsClusters/Cluster/ClusterNodes/WindowsHost"> <!-- copy to different part of schema (not working) --> <WindowsHost> <xsl:apply-templates/> </WindowsHost> </xsl:template>
그래서, 내가
/SAN/EQLHosts/WindowsHosts/WindowsHost
에/SAN/EQLHosts/WindowsClusters/Cluster/ClusterNodes/WindowsHost
을 변경하고자하는 파일입니다. 이 요소의 모든 하위 항목은 이미 복사중인 요소와 동일한 방식으로 처리됩니다.명확한 설명이 필요합니다. 이 정보가 당신의 대답을 바꿀 지 아니면 내가 단지 밀도인지 여부를 알려주십시오.
폴
귀하의 답변에 많은 감사드립니다. 원래 게시물에 추가 정보를 추가했습니다. –