XPATH,XSLT:由于模式不正确导致转换失败

时间:2016-02-08 11:58:21

标签: xml xslt xpath

我有需要转换的传入xml。 xml开始了:

        <?xml version="1.0" encoding="utf-8"?>
    <ExportDataSet xmlns="http://tempuri.org/ExportDataSet.xsd">
        <xs:schema id="ExportDataSet" targetNamespace="http://tempuri.org/ExportDataSet.xsd" xmlns:mstns="http://tempuri.org/ExportDataSet.xsd" xmlns="http://tempuri.org/ExportDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
            <xs:element name="ExportDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element name="Document">

尝试转换此xml我收到错误。如果将第一个方案更改为如下所示,我发现转换成功完成:

<?xml version="1.0" encoding="utf-8"?>
<ExportDataSet xmlns:d2p1="http://www.w3.org/2001/XMLSchema">
    <xs:schema id="ExportDataSet" targetNamespace="http://tempuri.org/ExportDataSet.xsd" xmlns:mstns="http://tempuri.org/ExportDataSet.xsd" xmlns="http://tempuri.org/ExportDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
        <xs:element name="ExportDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">

所以在开头 xmlns =&#34; http://tempuri.org/ExportDataSet.xsd" 更改为 xmlns:d2p1 =&#34; http://www.w3.org/2001/XMLSchema" 我使用Visual Studio生成的标准XSLT文件。 in始于:

        <?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" exclude-result-prefixes="msxsl">
        <xsl:output method="xml" indent="yes"/>

      <xsl:template match="ExportDataSet" >
        <xsl:element name="Declarations">
          <xsl:apply-templates select="Document" />
        </xsl:element>
      </xsl:template>

      <xsl:template match="Document">
...

有没有办法修改我的XSLT文件来处理原始XML而不对其应用任何更改? 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

非常感谢大家, 我不得不使用前缀声明新模式http://tempuri.org/ExportDataSet.xsd,而不是在所有节点上使用该前缀:

$translateProvider.useStaticFilesLoader({
        prefix: 'main/i18n/local-',
        suffix: '.json'
    });

现在改造工作正常。