【发布时间】:2013-06-18 15:08:02
【问题描述】:
这是我新的(编辑过的)更完整的场景: 我有一个 xml,它将用 xsl 进行转换。我从客户那里得到了一个例子,看起来像: 在文件中的 XML:
<?xml version="1.0" encoding="utf-8"?>
<xsi:myCompanyImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tns:myCompanyHeader xmlns:tns="http://www.MyComp.se/myCompany">
<tns:sentFr>123456</tns:sentFr>
</tns:myCompanyHeader>
<tns:myCompanyUsers xmlns:tns="http://www.MyComp.se/myCompany">
<tns:myCompanyUser ssn="1234567890">
<tns:firstName>John</tns:firstName>
</tns:myCompanyUser>
</tns:myCompanyUsers>
</xsi:myCompanyImport>
XSL 文件:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:tns="http://www.MyComp.se/myCompany"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.MyComp.se/myCompany myCompanyUsers.xsd"
xmlns:local="urn:cs">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:element name="xsi:myCompanyImport" namespace="http://www.w3.org/2001/XMLSchema-instance">
<!--Start Header-->
<xsl:element name="tns:myCompanyHeader" >
<xsl:element name="tns:sentFr" >
<xsl:value-of select="_x0023_MyComp_header/@SentFrom" />
</xsl:element>
</xsl:element>
<!--End Header-->
<!--Start Users-->
<xsl:element name="tns:myCompanyUsers">
<!--Loop through persons-->
<xsl:for-each select="_x0023_MyComp_header/_x0023_MyComp_Employee">
<xsl:element name="tns:myCompanyUser" >
<xsl:attribute name="ssn">
<xsl:value-of select="@inSsn" />
</xsl:attribute>
<xsl:element name="tns:firstName" >
<xsl:value-of select="@inFname"/>
</xsl:element>
</xsl:element>
</xsl:for-each>
<!--End Loop-->
</xsl:element>
<!--End Users-->
</xsl:element>
</xsl:template>
</xsl:stylesheet>
(不要介意 xsl 中的 Csharp 代码,它用于此处未显示的目的。) 所以,现在的结果是:
<?xml version="1.0" encoding="utf-8"?>
<xsi:myCompanyImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tns:myCompanyHeader xmlns:tns="http://www.MyComp.se/myCompany">
<tns:sentFr>123456</tns:sentFr>
</tns:myCompanyHeader>
<tns:myCompanyUsers xmlns:tns="http://www.MyComp.se/myCompany">
<tns:myCompanyUser ssn="1234567890">
<tns:firstName>John</tns:firstName>
</tns:myCompanyUser>
</tns:myCompanyUsers>
</xsi:myCompanyImport>
但客户想要:
<?xml version="1.0" encoding="utf-8"?>
<xsi:myCompanyImport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<tns:myCompanyHeader xmlns:tns="http://www.MyComp.se/myCompany">
<tns:sentFr>123456</tns:sentFr>
</tns:myCompanyHeader>
<tns:myCompanyUsers xmlns:tns="http://www.MyComp.se/myCompany"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.maxm.se/myCompany myCompanyUsers.xsd">
<tns:myCompanyUser ssn="1234567890">
<tns:firstName>John</tns:firstName>
</tns:myCompanyUser>
</tns:myCompanyUsers>
</xsi:myCompanyImport>
如何在 xsl 中编写它以便显示在 xml 中?我尝试了许多不同的方法,但没有成功。实际上只是我要添加到 tns:myCompanyUsers 的那 2 行:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.maxm.se/myCompany myCompanyUsers.xsd">
我想进去。但没有成功!
【问题讨论】:
-
您确定用户数据在 xsi 命名空间中吗?这太奇怪了。但是很难为您提供更多帮助,我看不出您希望转换的输出是什么。
-
嗯。嗯,他们已经多次改变了他们的要求,每次我们与他们交谈时,我都会得到新的信息。一会儿我会放一个更完整的场景。