Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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 如果Doctype或包含的实体为',如何准确复制Doctype;我不知道?_Xml_Xslt_Xpath_Entity_Doctype - Fatal编程技术网

Xml 如果Doctype或包含的实体为',如何准确复制Doctype;我不知道?

Xml 如果Doctype或包含的实体为',如何准确复制Doctype;我不知道?,xml,xslt,xpath,entity,doctype,Xml,Xslt,Xpath,Entity,Doctype,我今天的挑战是找出如何复制源文档的Doctype。 好的,首先这是我的来源: <?xml version='1.0' encoding='ISO-8859-1'?> <!DOCTYPE XMLBlock SYSTEM "/dtd/XMLBlock.dtd" [ <!ENTITY change '<issue> <version>VERSION NO: 98765432</version> <purpose><!

我今天的挑战是找出如何复制源文档的Doctype。 好的,首先这是我的来源:

<?xml version='1.0' encoding='ISO-8859-1'?>
<!DOCTYPE XMLBlock SYSTEM "/dtd/XMLBlock.dtd" [
<!ENTITY change '<issue>
 <version>VERSION NO: 98765432</version>
   <purpose><![CDATA[
     Main purpose
      - to do things
      - to fix issues ]]>
   </purpose>
 </issue> '>]>
<XMLBlock>
  <Title>XML Stuff</Title>
  <Content>DemoText</Content>
</XMLBlock>

]>
XML材料
降级文本
正如您所看到的,有一个版本号为的内部实体,它每次都会更改。现在我想抓住这个数字来决定需要哪个包装器。 这就是我的xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
  <xsl:output doctype-system="/dtd/XMLBlock.dtd" />
  <xsl:template match ="/" >
      <xsl:choose>
        <xsl:when test="&change;/issue/version &lt; 9000000">
          <XMLBlock>
            <red>
              <xsl:copy-of select="*" />
            </red>
          </XMLBlock>
        </xsl:when>
        <xsl:otherwise>
          <XMLBlock>
            <green>
               <xsl:copy-of select="*" />
            </green>
          </XMLBlock>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
  </xsl:stylesheet>

但是这个&改变;未解析,因为它不是xslt的一部分。 那么,我该如何解决这个问题,还是根本不可能? 问候


Markus

XSLT没有实体的声明
&changed所以它不是有效的XML,正如您已经知道的。样式表本身是固定的,可变部分仅是转换后的文档

转换器看到的解析XML也没有关于版本值的任何信息。因此,将其声明为实体似乎毫无用处

似乎您的版本号最好存储在处理指令中:

<?xml version="1.0"?>
<!DOCTYPE XMLBlock SYSTEM "/dtd/XMLBlock.dtd"]>
<?version 98765432?>
<XMLBlock> ...

...
在样式表中,可以轻松访问以下版本:

<xsl:variable name="version" select="/processing-instruction('version')"/>


好的。。。是的,对于像字符串这样的简单内容,我同意,但我也有这样的内容:“@markus0074最好把这个问题。回答一个问题,却收到一条评论,说实际情况更复杂,这也是令人沮丧的。