Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.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:如何生成HTML的id属性,该属性的值是常量,而不考虑源XML的变化,并且作为URL的一部分也是正确的_Url_Xslt - Fatal编程技术网

解决方法:XSLT:如何生成HTML的id属性,该属性的值是常量,而不考虑源XML的变化,并且作为URL的一部分也是正确的

解决方法:XSLT:如何生成HTML的id属性,该属性的值是常量,而不考虑源XML的变化,并且作为URL的一部分也是正确的,url,xslt,Url,Xslt,我使用XSLT1.0将源XML文件转换为HTML文档。在源文件中有部分元素 <section name="Name of this section"> ... </section> id属性用于从其他HTML文档引用此部分 <a href="https://www.example.org/document.html#(valude of id attribute)">Link to the section<

我使用XSLT1.0将源XML文件转换为HTML文档。在源文件中有
部分
元素

<section name="Name of this section">
    ...
</section>
id
属性用于从其他HTML文档引用此部分

<a href="https://www.example.org/document.html#(valude of id attribute)">Link to the section</a>

当前,
getrate id
函数用于生成
id
属性的值。但当源XML文件的结构改变时,它可能会改变。它会导致其他HTML文档的链接中断。所以我想使
id
属性的值保持不变,即使源文件的结构发生了变化

起初,我考虑使用
name
属性的值。但有时它包含不适合作为URL一部分的字符(空格、问号、非ASCII UTF-8字符等)。所以它不能被使用

接下来,我考虑将
id
属性添加到源XML文件的
section
元素中,并像在HTML文件中一样使用它。它确实提供了适当的值,但将其添加到源文件中的所有
部分
元素很麻烦。所以我想把它当作最后的手段


那么,是否有任何方法可以生成
id
属性的值,该属性是常量,无论源文件如何更改,也可以作为URL的一部分?

引用我的文档的维护者告诉我XSLT 2.0的
encode-for-uri()
和EXSLT的
str:encode-uri()
。我使用libxslt的
xsltproc
作为处理器,它支持EXSLT。所以我决定使用
str:encodeuri(@name)
作为
id
属性的值。它有两个缺点。起初,它不能保证唯一性。如果源XML文件中有多个
元素具有相同的
名称
属性值,则
id
值将被复制。第二点是,当
name
属性的值更改时,
id
值也会更改。然而,在我的情况下,它们其实并不重要。
name
属性的值在源文件中是唯一的,很少更改。因此,我可以使
id
对于我的情况来说是唯一的,并且几乎是恒定的。

那么,您如何/在哪里/何时在其他文档的链接中生成id?如果你的算法有效,你需要应用相同的算法。或者在同一代码中生成这两个文档,即在XSLT 2或3中,您可以使用
xsl:result document
通过一次转换生成单独的文档。@MartinHonnen不幸的是,引用我们的html文档由其他组织维护,我们无法控制。所以不可能将我们的算法应用到他们的文档中。这就是为什么我想使“id”属性的值保持不变,而不考虑源文件的更改。
<a href="https://www.example.org/document.html#(valude of id attribute)">Link to the section</a>