いずれかで名前空間プレフィックスなしで指定することによって、XMLの部分を抽出します。「EMP」</p> <p>と名前空間の接頭辞なしで相互に名前空間プレフィックスとXSLT
<emp:Employees xmlns:emp="http://www.xyz.com">
<EmployeeDetails>
<EmployeeCompanyDetails>
<CompanyName>XYZ</CompanyName>
<Desgination>Engineer</Desgination>
<YearOfExp>8</YearOfExp>
<Department>HR</Department>
<ProjectDetails>
<ProjectName>ABC</ProjectName>
<Client>ZZZ</Client>
<Manager>MMMM</Manager>
</ProjectDetails>
</EmployeeCompanyDetails>
</EmployeeDetails>
</emp:Employees>
私だけ<ProjectDetails>
定義された名前空間接頭辞を持たないことを抽出するには、以下のXSLTを書かれています。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:emp="http://www.xyz.com" version="1.0">
<xsl:template match="/">
<emp:ProjectDetails>
<xsl:copy-of select="*//ProjectDetails/*" />
<xsl:copy>
<!--xsl:apply-templates /-->
</xsl:copy>
</emp:ProjectDetails>
</xsl:template>
<xsl:template match="*">
<xsl:element name="ns:{local-name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{local-name()}">
<xsl:value-of select="." />
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>
上記のxsltは、入力xmlが名前空間接頭辞を持たない場合に機能します。 入力xmlに名前空間接頭辞emp:
があるとしたら、私のxsltコードを<xsl:copy-of select="*//emp:ProjectDetails/*" />
に変更する必要があります。
私の質問:xmlの一部を抽出する共通のxsltを書くことはできますか?
良い質問、+1を。私の答えは、非常に短くて完全な解決策を見てください。 :) –