解决方法:XSLT:如何生成HTML的id属性,该属性的值是常量,而不考虑源XML的变化,并且作为URL的一部分也是正确的
我使用XSLT1.0将源XML文件转换为HTML文档。在源文件中有解决方法: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<
部分
元素
<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>