首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XPROC -在辅助端口中生成文件

XPROC -在辅助端口中生成文件
EN

Stack Overflow用户
提问于 2011-11-20 11:27:54
回答 1查看 585关注 0票数 0

我的要求是在辅助端口中生成一个XML文件和几个HTML文件。我已经在XProc中配置了几个步骤。

以下是示例代码:

代码语言:javascript
运行
复制
<p:xslt name="create-document">
    <p:input port="stylesheet">
      <p:document href="stylesheet.xsl" />
    </p:input>  
  </p:xslt>  
  <p:for-each>
    <p:iteration-source>
      <p:pipe step="create-document" port="secondary" />
    </p:iteration-source>
   <p:store>
    <p:with-option name="doctype-public" select="'-//W3C//DTD XHTML 1.0 Frameset//EN'" />
    <p:with-option name="doctype-system" select="'http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd'" />
    <p:with-option name="encoding" select="'UTF-8'" />
    <p:with-option name="media-type" select="'text/html'" />
    <p:with-option name="method" select="'xhtml'" />
    <p:with-option name="omit-xml-declaration" select="'no'" />
  </p:store>
  </p:for-each>

这里的问题是HTML文件是正确生成的。并且生成了XML文件,但我无法查看XML内容。相反,由于上述代码片段中的<p:store>,它在HTML中显示了所有的format.This。

怎么会有两个<p:store>步骤呢?(一个用于HTML,另一个用于XML)

EN

回答 1

Stack Overflow用户

发布于 2011-11-24 23:12:48

如果您能以某种方式确定辅助输出上的每个文档都是用哪些xsl:result-document参数编写的,那就太好了。您可以将它们复制到您的p:store中。但是您可以从每个文档中派生出其他内容。您可以使用base-uri()检索文档名称,并且可以查看根元素。您可以使用以下命令将这些值放入变量中:

代码语言:javascript
运行
复制
<p:variable name="path" select="base-uri(/*)"/>
<p:variable name="root" select="local-name(/*)"/>

(将这些放在p:iteration-source下面。)

然后,您需要决定如何调用p:store。如果您的XProc解析器支持XPath 2.0 (就像XMLCalabash一样),那么您可以使用XPath。但我建议使用这样的p:choose

代码语言:javascript
运行
复制
<p:choose>
    <p:when test="ends-with($path, '.xhtml')">
        <p:store
            doctype-public="-//W3C//DTD XHTML 1.0 Frameset//EN"
            doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"
            encoding="UTF-8"
            media-type="text/html"
            method="xhtml"
            omit-xml-declaration="no">
            <p:with-option name="href" select="$path"/>
        </p:store>
    </p:when>
    <p:otherwise>
        <p:store
            encoding="UTF-8"
            media-type="application/xml"
            method="xml"
            omit-xml-declaration="no">
            <p:with-option name="href" select="$path"/>
        </p:store>
    </p:otherwise>
</p:choose>

(这个完整的p:choose将替换您已有的p:store。)

p:when中的测试只关注$path,但如果您愿意,也可以包含$root的测试。

它还要求您在xsl:result-document语句中使用.xhtml作为扩展,以获得HTML输出,但是如果您愿意,可以很容易地对其进行调整。

至少,varchoose应该足以正确地编写您的XML。

祝好运!

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

https://stackoverflow.com/questions/8199251

复制
相关文章

相似问题

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