我正在尝试使用xsl转换将数据从file2复制到file1。我能够复制数据,但是对生成的xml文件的xsd验证失败。这是我的代码:
file1.xml:
<Org>
<Security xmlns:saxon="http://saxon.sf.net" />
</Org>
<Org>
<Security xmlns:saxon="http://saxon.sf.net">
<Access Privileges>
<Access Rules>Rule1</Access Rules>
</Access Privileges>
</Security>
</Org>
file2.xml:
<AccessProfile>
<Policy description="SecurityProfile">Policy1</Policy>
<PolicyValue description="SecurityProfile">Value1</PolicyValue>
</AccessProfile>
result.xml:
<Org>
<Security>
<Access>
<AccessProfile>
<Policy>Policy1</Policy>
<PolicyValue>Value1</PolicyValue>
</AccessProfile>
</Access>
</Security>
<Org>
</Org>
<Security>
<Access>
<AccessProfile>
<Policy>Policy1</Policy>
<PolicyValue>Value1</PolicyValue>
</AccessProfile>
</Access>
</Security>
</Org>
所需的输出:
<Org>
<Security xmlns:saxon="http://saxon.sf.net" newAttr="Attr1">
<Access>
<AccessProfile description="SecurityProfile">
<Policy description="SecurityProfile">Policy1</Policy>
<PolicyValue description="SecurityProfile" vocabulary="simple">Value1</PolicyValue>
</AccessProfile>
</Access>
</Security>
</Org>
<Org>
<Security xmlns:saxon="http://saxon.sf.net" newAttr="Attr1">
<Access Privileges>
<Access Rules>Rule1</Access Rules>
</Access Privileges>
<Access>
<AccessProfile description="SecurityProfile">
<Policy description="SecurityProfile">Policy1</Policy>
<PolicyValue description="SecurityProfile" vocabulary="simple">Value1</PolicyValue>
</AccessProfile>
</Access>
</Security>
</Org>
这是我的xsl文件中的代码:
<xsl:template match="*[local-name()='Org']/*[local-name()='Security']">
<xsl:variable name="securityDesc" select="document($lookup)/@sam:description" />
<xsl:copy>
<xsl:element name="Access">
<xsl:attribute name="description"><xsl:value-of select="$securityDesc" /></xsl:attribute>
<xsl:for-each select="document($lookup)/AccessProfile">
<xsl:copy>
<xsl:attribute name="description"><xsl:value-of
select="$securityDesc" /></xsl:attribute>
<xsl:for-each select="document($lookup)/AccessProfile/*">
<xsl:variable name="vocabulary" select="document($lookup)/AccessProfileValue/@profileVal" />
<xsl:element name="{name(.)}">
<xsl:attribute name="description"><xsl:value-of select="$securityDesc" /></xsl:attribute>
<xsl:if test="*[name(.)='PolicyValue']">
<xsl:attribute name="vocabulary"><xsl:value-of select="$vocabulary" /></xsl:attribute>
</xsl:if>
<xsl:value-of select="." />
</xsl:element>
</xsl:for-each>
</xsl:copy>
</xsl:for-each>
</xsl:element>
</xsl:copy>
</xsl:template>
我正在尝试将具有元素的节点AccessProfile复制到名为Access的元素下的Security节点中。复制它时,它将删除Security下的所有其他子节点,如第二个Security元素的result.xml中所示。我需要保持数据完整。我还需要在复制的元素之一上添加属性,以使其通过验证。我正在尝试向添加的节点元素之一添加属性,但无法做到这一点。另外,我需要将其他属性添加到“安全性”节点以进行验证。感谢您的帮助。