XSLT重命名result-document()中的链接目标

XSLT重命名result-document()中的链接目标,xslt,Xslt,使用result-document()将深度嵌套的XML文档拆分为多个输出文件时,是否有方法重写@href值以指向新文档中的ID?例如,将一本书拆分为多个文档,每个文档都将成为一个新文件,命名为book part/@id。在第1章的输出文件中,第2章的输出文件中可能有一个指向目标的链接,该链接值过去在单个文件中是相对的。现在,指向不同文件的链接应该具有第2章的文件名,后跟#和原始目标值。也有一些更改来创建适当的链接元素(相关对象),但我正试图具体生成目标值。 i、 e链接目标模式:[output

使用result-document()将深度嵌套的XML文档拆分为多个输出文件时,是否有方法重写@href值以指向新文档中的ID?例如,将一本书拆分为多个文档,每个文档都将成为一个新文件,命名为book part/@id。在第1章的输出文件中,第2章的输出文件中可能有一个指向目标的链接,该链接值过去在单个文件中是相对的。现在,指向不同文件的链接应该具有第2章的文件名,后跟#和原始目标值。也有一些更改来创建适当的链接元素(相关对象),但我正试图具体生成目标值。 i、 e链接目标模式:[outputfilename.xml]#[原始文件目标id]

似乎我需要收集原始文件中每个@rid的值,并在插入文件名之前检查目标是否位于不同的文件中,并根据输出文件写入输出@document id。但我很难理解如何知道输出文件名以及在XSLT中重写目标的位置

源xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0">
    <book-meta>
        <book-id>123.4567890</book-id>
    </book-meta>
    <body>
        <book-part book-part-type="chapter" id="book.123.4567890.ch01">
            <book-part-meta>
                <title-group>
                    <title>Chapter 1</title>
                </title-group>
            </book-part-meta>
            <body>
                <p> some text with a <xref rid="a">link to chapter 1</xref></p>
                <p> some text with a <xref rid="b">link to chapter 2</xref></p>
                <p id="a">a target id in chapter 1</p>
            </body>
        </book-part>
        <book-part book-part-type="chapter" id="book.123.4567890.ch02">
            <book-part-meta>
                <title-group>
                    <title>Chapter 2</title>
                </title-group>
            </book-part-meta>
            <body>
                <p> some text with a <xref rid="a">link to chapter 1</xref></p>
                <p> some text with a <xref rid="b">link to chapter 2</xref></p>
                <p id="b">a target id in chapter 1</p>
            </body>
        </book-part>
    </body>
</book>

123.4567890
第一章
一些链接到第1章的文本

一些链接到第2章的文本

第1章中的目标id

第二章 一些链接到第1章的文本

一些链接到第2章的文本

第1章中的目标id

输出book.123.4567890.ch01.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table">
    <book-meta>
        <book-id>123.4567890</book-id>
    </book-meta>
    <body>
        <book-part book-part-type="chapter" id="book.123.4567890.ch01">
            <book-part-meta>
                <title-group>
                        <title>Chapter 1</title>
                </title-group>
            </book-part-meta>
            <body>
                <p> some text with a <xref rid="a">link to chapter 1</xref></p>
                <p> some text with a <related-object document-type="chapter" object-id="book.123.4567890.ch02.xml#b">link to chapter 2</related-object></p>
                <p id="a">a target id in chapter 1</p>
            </body>
            </book-part>
    </body>
</book>

123.4567890
第一章
一些链接到第1章的文本

一些链接到第2章的文本

第1章中的目标id

输出book.123.4567890.ch02.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//NLM//DTD Book DTD v2.1 20050630//EN" "book.dtd">
<book dtd-version="3.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table">
    <book-meta>
        <book-id>123.4567890</book-id>
    </book-meta>
    <body>
        <book-part book-part-type="chapter" id="book.123.4567890.ch02">
            <book-part-meta>
                <title-group>
                <title>Chapter 2</title>
                </title-group>
            </book-part-meta>
            <body>
                <p> some text with a <related-object document-type="chapter" object-id="book.123.4567890.ch01.xml#a">link to chapter 1</related-object></p>
                <p> some text with a <xref rid="b" >link to chapter 2</xref></p>
                <p id="b">a target id in chapter 1</p>
            </body>
        </book-part>
    </body>
</book>

123.4567890
第二章
一些链接到第1章的文本

一些链接到第2章的文本

第1章中的目标id


简短的回答是:是的,你已经正确地理解了你需要做什么

对于每个超链接,您需要确定其目标是与链接源位于同一输出文件中,还是位于不同的输出文件中。您已经正确地识别了这里的挑战:知道新文件名将是什么。这并不像一开始看起来那么难;做个深呼吸,把它解决掉

您位于外部参照元素处;它具有rid属性。您想知道:外部参照和目标是在同一个输出文件中还是在不同的输出文件中?要决定这一点,你必须

  • 从外部参照元素上升到包含的书本零件,并确定其文件名。将此值放入变量(fn xref)
  • 转到目标元素(
    id(@rid)
    ),然后从该元素上升到包含图书的部分,并确定其文件名。将此值放入变量(fn rid)中
  • 比较$fn xref和$fn rid的值。如果他们相等,就做正确的事。如果他们不同,那么做另一件正确的事情

我猜您不需要帮助将此散文描述转换为XSLT,但如果需要,请大声说出来。

尽量使您的问题简短一点clearer@user3396874-如果确实需要有关xslt的帮助,请确保指定版本。