Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml XSLT命名空间防止在输出中更改标识转换_Xml_Xslt_Xslt 2.0 - Fatal编程技术网

Xml XSLT命名空间防止在输出中更改标识转换

Xml XSLT命名空间防止在输出中更改标识转换,xml,xslt,xslt-2.0,Xml,Xslt,Xslt 2.0,我正在对一些EAD编码的存档描述XML文档执行XSLT2.0标识转换。我需要稍微修改输出,但似乎遇到了名称空间问题 不要在支持模式的处理器中测试此项,否则会出现错误!: XSLT: Sample-EAD.xml也可在pastebin上找到: 如果我从元素中提取名称空间信息,这里也可以使用:带有修改的标识转换可以工作 样本-EAD-2: <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ead> <ea

我正在对一些EAD编码的存档描述XML文档执行XSLT2.0标识转换。我需要稍微修改输出,但似乎遇到了名称空间问题

不要在支持模式的处理器中测试此项,否则会出现错误!:

XSLT:

Sample-EAD.xml也可在pastebin上找到:

如果我从元素中提取名称空间信息,这里也可以使用:带有修改的标识转换可以工作

样本-EAD-2:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ead>

<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511" countryencoding="iso3166-1" dateencoding="iso8601" langencoding="iso639-2b">  
<eadid>01234</eadid>
<filedesc>
    <AAA>1</AAA>
    <BBB>2</BBB>
</filedesc>
</eadheader>
<archdesc>
    <bib>
        <CCC>1</CCC>
        <DDD>2</DDD>
    </bib>
</archdesc>
我不太擅长使用名称空间,因此任何建议都将不胜感激。如果我尝试将名称空间添加到XSLT中,转换会起作用,但我会在新元素中获得名称空间属性。非常感谢您的阅读和建议! 干杯

编辑: 输入w/名称空间,运行标识转换结果-

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd">

<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511"
          countryencoding="iso3166-1"
          dateencoding="iso8601"
          langencoding="iso639-2b"> 
     <eadid>01234</eadid>
     <filedesc>
           <AAA>1</AAA>
           <BBB>2</BBB>
     </filedesc>
  </eadheader>
  <archdesc>
        <bib>
              <CCC>1</CCC>
              <DDD>2</DDD>
        </bib>
  </archdesc>
</ead>
不带名称空间的输入通过标识转换结果运行-

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead>

<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511"
          countryencoding="iso3166-1"
          dateencoding="iso8601"
          langencoding="iso639-2b"> 
     <eadid>01234</eadid>
     <filedesc>
     <header>Subjects</header>
           <AAA>1</AAA>
           <BBB>2</BBB>
     </filedesc>
  </eadheader>
  <archdesc>
        <bib>
              <CCC>1</CCC>
              <DDD>2</DDD>
        </bib>
  </archdesc>
最后,输入w/名称空间通过XSLT运行,并添加名称空间结果-

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead>

<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511"
          countryencoding="iso3166-1"
          dateencoding="iso8601"
          langencoding="iso639-2b"> 
     <eadid>01234</eadid>
     <filedesc>
     <header>Subjects</header>
           <AAA>1</AAA>
           <BBB>2</BBB>
     </filedesc>
  </eadheader>
  <archdesc>
        <bib>
              <CCC>1</CCC>
              <DDD>2</DDD>
        </bib>
  </archdesc>
XSLT:

结果:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd">

<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511"
          countryencoding="iso3166-1"
          dateencoding="iso8601"
          langencoding="iso639-2b"> 
     <eadid>01234</eadid>
     <filedesc>
           <AAA>1</AAA>
           <BBB>2</BBB>
     </filedesc>
  </eadheader>
  <archdesc>
        <bib>
              <CCC>1</CCC>
              <DDD>2</DDD>
        </bib>
  </archdesc>
</ead>
编辑2: 抱歉,我想我没有表达出我想要的结果。我希望在修改的元素中避免附加属性,因为附加处理将在标识转换之后进行,并且我希望使XML尽可能接近它的当前状态(编辑除外)。再次感谢您的耐心和帮助!以下是一个例子:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd" xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511" countryencoding="iso3166-1" dateencoding="iso8601" langencoding="iso639-2b">  
    <eadid>01234</eadid>
    <filedesc>
        <header>List Name</header>
        <AAA>1</AAA>
        <BBB>2</BBB>
    </filedesc>
</eadheader>
<archdesc>
    <bib>
        <CCC>1</CCC>
        <DDD>2</DDD>
    </bib>
</archdesc>
</ead>

这是一个很长的问题,有点难以理解,但我认为这正是你想要的。问题是,要匹配的元素位于源xml文档的名称空间中,因此也必须匹配名称空间。因此,我在xslt:xmlns:input=urn:isbn:1-931666-22-9中为它分配了一个前缀,然后我使用它来匹配filedesc元素:。我还将同一名称空间设置为xsl的默认名称空间,以便您的元素位于该名称空间中

<?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:input="urn:isbn:1-931666-22-9"
    xmlns="urn:isbn:1-931666-22-9"
    exclude-result-prefixes="input"
    version="2.0">

  <xsl:output method="xml" indent="yes" standalone="no"/>

  <!-- The identity transform -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="input:filedesc">
    <xsl:copy>
      <header>Subjects</header>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>  
</xsl:stylesheet>  

你能发布你得到的输出并指出你对哪些属性有疑问吗?嗨,科林D,我已经添加了更多的例子。请让我知道,如果我可以提供更多的信息!谢谢我认为排除结果prefixes=all是问题所在,只列出您真正想要排除的前缀。嗨,biziclop,谢谢您的建议,但这似乎没有帮助。将元素添加到仍然不起作用。所以您关心的属性是xmlns:*属性?您希望将其从输出中排除的原因是什么?嗨,大卫-谢谢您的回复。我通过另一个帮助论坛得到了类似的回答。我真的很感谢你的帮助!干杯
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ead xsi:schemaLocation="urn:isbn:1-931666-22-9 http://www.loc.gov/ead/ead.xsd" xmlns:ns2="http://www.w3.org/1999/xlink" xmlns="urn:isbn:1-931666-22-9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<eadheader findaidstatus="Ready_for_online" repositoryencoding="iso15511" countryencoding="iso3166-1" dateencoding="iso8601" langencoding="iso639-2b">  
    <eadid>01234</eadid>
    <filedesc>
        <header>List Name</header>
        <AAA>1</AAA>
        <BBB>2</BBB>
    </filedesc>
</eadheader>
<archdesc>
    <bib>
        <CCC>1</CCC>
        <DDD>2</DDD>
    </bib>
</archdesc>
</ead>
<?xml version="1.0" encoding="UTF-8"?>
 <xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:input="urn:isbn:1-931666-22-9"
    xmlns="urn:isbn:1-931666-22-9"
    exclude-result-prefixes="input"
    version="2.0">

  <xsl:output method="xml" indent="yes" standalone="no"/>

  <!-- The identity transform -->
  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>

  <xsl:template match="input:filedesc">
    <xsl:copy>
      <header>Subjects</header>
      <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
  </xsl:template>  
</xsl:stylesheet>