Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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
空XML拆分出默认XML_Xml_Xslt - Fatal编程技术网

空XML拆分出默认XML

空XML拆分出默认XML,xml,xslt,Xml,Xslt,我将一个XML传递给XSL,XSL提供标准输出。根据某些情况,有时我可能会将XML设置为空。如果我们有空的XML并在XSL中输出标准或默认值,有什么办法吗 一种方法是检查XSL中是否存在根节点,如果不存在,则打印一些内容 但是,当我在Perl中尝试tsimiliar thin时,脚本挂起。因此,我认为您必须检查大小,然后应用XSL,如果根标记是空节点集,则应该是这样的 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/19

我将一个XML传递给XSL,XSL提供标准输出。根据某些情况,有时我可能会将XML设置为空。如果我们有空的XML并在XSL中输出标准或默认值,有什么办法吗

一种方法是检查XSL中是否存在根节点,如果不存在,则打印一些内容


但是,当我在Perl中尝试tsimiliar thin时,脚本挂起。因此,我认为您必须检查大小,然后应用XSL,如果根标记是空节点集,则应该是这样的

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <xsl:choose> 
      <xsl:when test='*[not(*)]'> 
        Empty
      </xsl:when> 
      <xsl:otherwise> 
        Full 
      </xsl:otherwise> 
    </xsl:choose> 
  </xsl:template> 
</xsl:stylesheet>

空的
满满的
。。。如果文件为空(或者至少不包含根元素),XSLT处理器很可能会抛出异常

如果我们有空的XML,有什么办法吗 并获取标准或默认值 放入XSL

永远不能有“空XML”。

根据定义,格式良好的XML文档必须具有top元素。如果对任何格式不正确的XML文档应用XSLT 1.0转换,则任何符合XSLT 1.0的处理器都必须产生错误,并且不会进行任何处理。

From

如果fn:doc($uri)返回一个文档 节点,此函数返回true。如果 $uri不是有效的xs:anyURI,是 出现错误[错误:FODC0005]。 否则,该函数返回 错

来自

一种可能的处理模型 功能如下。资源 由URI引用标识的是 恢复。如果资源不能被调用 检索时,会引发错误 [错误:FODC0002]。产生的数据 然后从检索操作开始 解析为XML文档和树 是按照 [XQuery 1.0和XPath 2.0数据模型]。 如果顶级媒体类型已知 并且是“文本”,内容被解析 与媒体类型相同 为文本/xml;否则,它将被解析 与媒体类型相同 我们使用了application/xml。如果内容 无法成功分析,原因是 出现错误[错误:FODC0002]。 否则,函数的结果 文档节点是否位于 生成的树。这棵树是 根据模式进行可选验证

所以,看起来你可以这样做(我很谨慎,因为“一种可能的处理模式”这个词): 此样式表:

<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:param name="pURI" select="'B.xml'"/>
    <xsl:template match="/">
        <DefaultResult>
            <xsl:if test="doc-available($pURI)">
                <xsl:apply-templates select="doc($pURI)/*"/>
            </xsl:if>
        </DefaultResult>
    </xsl:template>
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
以及此替代信息:

Error on line 1 column 1 of B.xml:
  SXXP0003: Error reported by XML parser: Premature end of file.
Altova输出:

<DefaultResult>
    <Entry type="Folder">
        <Name/>
        <Date/>
        <Info>
            <URI>B.xml</URI>
            <Comment/>
            <Files>0</Files>
            <CompressedSize>0</CompressedSize>
            <UncompressedSize>0</UncompressedSize>
            <Ratio>0</Ratio>
            <ContainsEncryptedFiles>false</ContainsEncryptedFiles>
        </Info>
    </Entry>
</DefaultResult>

B.xml
0
0
0
0
假的

空是什么意思?是0字节还是空根元素?
<DefaultResult>
    <Entry type="Folder">
        <Name/>
        <Date/>
        <Info>
            <URI>B.xml</URI>
            <Comment/>
            <Files>0</Files>
            <CompressedSize>0</CompressedSize>
            <UncompressedSize>0</UncompressedSize>
            <Ratio>0</Ratio>
            <ContainsEncryptedFiles>false</ContainsEncryptedFiles>
        </Info>
    </Entry>
</DefaultResult>