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
XSLT正在将我的十六进制属性转换为其他属性,如何阻止它?_Xslt_Hex - Fatal编程技术网

XSLT正在将我的十六进制属性转换为其他属性,如何阻止它?

XSLT正在将我的十六进制属性转换为其他属性,如何阻止它?,xslt,hex,Xslt,Hex,我正在尝试将一个xml文件转换为输出另一个xml文件,我需要将属性“account”以与下面显示的相同的方式输出。我在文件中有很多这样的值,大多数都不起作用 对于类似0x0406的帐户值,其输出为0.0.06。但是对于像0x002d这样的值,它将它们单独保留,它们以我想要的方式出现 有什么想法吗 初始XML: <?xml version="1.0" encoding="UTF-8"?> ... <foo account="0x0406" other-stuff="blah" s

我正在尝试将一个xml文件转换为输出另一个xml文件,我需要将属性“account”以与下面显示的相同的方式输出。我在文件中有很多这样的值,大多数都不起作用

对于类似0x0406的帐户值,其输出为0.0.06。但是对于像0x002d这样的值,它将它们单独保留,它们以我想要的方式出现

有什么想法吗

初始XML:

<?xml version="1.0" encoding="UTF-8"?>
...
<foo account="0x0406" other-stuff="blah" something-name="blah again"/>
...

...
...
这是我的xslt模板:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:user="http://some-internal-thing/user">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
...
<xsl:attribute name="account"><xsl:value-of select="@account"/></xsl:attribute>
...

...
...

能否尝试更改编码?例如,“ASCII”而不是“UTF-8”。

无法再现所述问题

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:user="http://some-internal-thing/user">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>

 <xsl:template match="/*">
   <xsl:copy>
    <xsl:attribute name="account"><xsl:value-of select="@account"/></xsl:attribute>
   </xsl:copy>
 </xsl:template>
</xsl:stylesheet>
我使用10个不同的xslt处理器(Msxml3、Msxml4、Msxml6、.NET XslTransform、.NET XslCompiledTransform、AltovaXml(用于xslt 1.01.0)、Saxon 6.5.4、Saxon 9.1.07、Saxon 9.1.07.NET和XML-SPY-XSLT2.0)运行了以下转换,它们都产生了相同的正确结果

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:user="http://some-internal-thing/user">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>

 <xsl:template match="/*">
   <xsl:copy>
    <xsl:attribute name="account"><xsl:value-of select="@account"/></xsl:attribute>
   </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

对以下XML文档执行此转换时

<?xml version="1.0" encoding="UTF-8"?>
<foo account="0x0406" other-stuff="blah" something-name="blah again"/>
<foo account="0x0406" />

生成预期的正确结果

<?xml version="1.0" encoding="UTF-8"?>
<foo account="0x0406" other-stuff="blah" something-name="blah again"/>
<foo account="0x0406" />


如果您的XSLT处理器不是其中之一,并且您确实得到了错误的结果,那么这是一个错误,应该向供应商报告。

这听起来很奇怪。XSLT应该始终将属性值作为普通字符串处理,除非被告知执行其他操作。我认为错误不在您粘贴的部分。这听起来不对,您能给我们一个完整(小)的示例和一步一步的说明来重现该结果吗?还请提及您使用的XSLT实现。我尝试用xsltproc和saxon测试了这一点,但没有发生。您能否发布一个完整的示例XML/XSLT对,而不是我必须修改才能使用的这些缩写对?感谢大家确认这与XSLT无关-在之前的过程中,我使用sed替换了XML文件中的文字字符串0.0.0,但没有使用,所以它取代了任何与正则表达式匹配的东西,并在我没有意识到的情况下弄乱了我的属性。人们仍然使用ASCII?或者干脆从源XML声明中删除编码,让XSLT引擎检测。也许你的源文件不是UTF-8。我不能尝试ASCII,我的xml文件中有unicode字符,我在尝试ASCII时出错。哇,10个不同的XSLT处理器-我希望我有这样的时间。感谢您的确认,它让我看到了除XSLT之外的所有内容,结果是我在之前的过程中接触了XML文件,并替换了文本字符串0.0.0(当然没有引用),因此它替换了正则表达式。我讨厌继承代码。@wonderfulthunk:我很高兴这有帮助。信不信由你,这只花了我2-3分钟。我使用的是一个XSLT IDE,它允许只需单击一两下就可以对任何XSLT处理器(已经安装)执行任何转换。