首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XSLT在结果文档()中重命名链接目标

XSLT在结果文档()中重命名链接目标
EN

Stack Overflow用户
提问于 2014-03-08 21:13:58
回答 1查看 108关注 0票数 0

当使用结果文档()将深度嵌套的XML文档拆分为多个输出文件时,是否有方法重写@href值以指向新文档中的ids?例如,将一本书分割成多个文档,基于每个文档成为一个新文件,命名为book-part/@id。在第1章的输出文件中,第2章的输出文件中可能有指向目标的链接,该链接值过去在单个文件中是相对的。现在,指向另一个文件的链接应该有第2章的文件名,后面跟着#和原始目标值。也有一些更改来生成适当的链接元素(Related),但它是我正试图具体生成的目标值。链接目标模式:outputfilename.xml#原始-filetarget-id

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

源xml:

代码语言:javascript
复制
<?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>

输出book.123.4567890.ch01.xml

代码语言:javascript
复制
<?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>

输出book.123.4567890.ch02.xml

代码语言:javascript
复制
<?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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-08 22:48:25

简单的回答是:是的,你已经正确地理解了你需要做的事情。

对于每个超链接,您需要弄清楚它的目标是在与链接源相同的输出文件中,还是在不同的输出文件中。您已经正确地确定了这里的挑战:知道新的文件名是什么。这并不像一开始看上去那么困难,只是深吸一口气,把它解决。

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

  • 从xref元素提升到包含图书的部分,并计算出它的文件名。将此值放入变量(Fn)中。
  • 转到目标元素(id(@rid)),然后从该元素提升到包含图书的部分,并确定其文件名将是什么。将此值放入变量(fn-rid)中。
  • 比较$fn-xref和$fn-rid的值。如果他们是平等的,做正确的事情。如果他们意见不同,那就做另一件正确的事情。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22275182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档