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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/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
Xslt 转换XML时如何从处理指令中提取信息?_Xslt_Xpath_Processing Instruction - Fatal编程技术网

Xslt 转换XML时如何从处理指令中提取信息?

Xslt 转换XML时如何从处理指令中提取信息?,xslt,xpath,processing-instruction,Xslt,Xpath,Processing Instruction,在更改DTD之后,我正在转换一些XML文件 其中一个变化涉及将处理指令的内容更改为其他元素的属性,但我在从指令中选择特定信息时遇到了困难。我在如何使用PIs方面没有找到太多的东西——我找到的几乎所有东西都是关于如何创建PIs的——但我确实找到了: 例如,原始XML: <?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?> <?Fm Condition FM8_TRACK_CHANGES_

在更改DTD之后,我正在转换一些XML文件

其中一个变化涉及将处理指令的内容更改为其他元素的属性,但我在从指令中选择特定信息时遇到了困难。我在如何使用PIs方面没有找到太多的东西——我找到的几乎所有东西都是关于如何创建PIs的——但我确实找到了:

例如,原始XML:

<?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_ADDED Forest%20Green SINGLE_UNDERLINE show AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_DELETED Red STRIKETHROUGH show AsIs?>

<products>
    <?Fm Condstart p-version?>
    <prod>
        <form>inj</form>
        <strength>10, 20, 50</strength>
    </prod>
    <?Fm Condend p-version?>

    <?Fm Condstart e-version?>
    <prod>
        <form>inj</form>
        <strength>10</strength>
        <packsize>0.4&nbsp;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>20</strength>
        <packsize>0.4&nbsp;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>50</strength>
        <packsize>0.4&nbsp;mL (syringe), 4</packsize>
    </prod>
    <?Fm Condend e-version?>
</products>

注射
10, 20, 50
注射
10
0.4毫升(注射器),4
注射
20
0.4毫升(注射器),4
注射
50
0.4毫升(注射器),4
我尝试了这个XSL模板

<xsl:template match="processing-instruction()">
    <xsl:choose>
        <xsl:when test="'Condstart'">
            <xsl:text>ELEPHANTS</xsl:text>
        </xsl:when>

        <xsl:otherwise>
            <xsl:copy />
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>

大象

但它会将文档中的所有处理指令变成“大象”——而不仅仅是我试图选择的指令。

您想要这样的指令:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match=
 "processing-instruction()[starts-with(.,'Condstart')]">
  <xsl:text>ELEPHANTS</xsl:text>
 </xsl:template>
</xsl:stylesheet>
<?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_ADDED Forest%20Green SINGLE_UNDERLINE show AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_DELETED Red STRIKETHROUGH show AsIs?>
<products>
    <?Fm Condstart p-version?>
    <prod>
        <form>inj</form>
        <strength>10, 20, 50</strength>
    </prod>
    <?Fm Condend p-version?>
    <?Fm Condstart e-version?>
    <prod>
        <form>inj</form>
        <strength>10</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>20</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>50</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <?Fm Condend e-version?>
</products>

大象
当此转换应用于提供的(格式正确的)XML文档时:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:template match="node()|@*">
  <xsl:copy>
   <xsl:apply-templates select="node()|@*"/>
  </xsl:copy>
 </xsl:template>

 <xsl:template match=
 "processing-instruction()[starts-with(.,'Condstart')]">
  <xsl:text>ELEPHANTS</xsl:text>
 </xsl:template>
</xsl:stylesheet>
<?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_ADDED Forest%20Green SINGLE_UNDERLINE show AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_DELETED Red STRIKETHROUGH show AsIs?>
<products>
    <?Fm Condstart p-version?>
    <prod>
        <form>inj</form>
        <strength>10, 20, 50</strength>
    </prod>
    <?Fm Condend p-version?>
    <?Fm Condstart e-version?>
    <prod>
        <form>inj</form>
        <strength>10</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>20</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>50</strength>
        <packsize>0.4&#xA0;mL (syringe), 4</packsize>
    </prod>
    <?Fm Condend e-version?>
</products>

注射
10, 20, 50
注射
10
0.4 ;mL(注射器),4
注射
20
0.4 ;mL(注射器),4
注射
50
0.4 ;mL(注射器),4
生成所需的正确结果

<?Fm Condition FM8_SYSTEM_HIDEELEMENT Dark%20Grey NO_OVERRIDE hide AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_ADDED Forest%20Green SINGLE_UNDERLINE show AsIs?>
<?Fm Condition FM8_TRACK_CHANGES_DELETED Red STRIKETHROUGH show AsIs?>
<products>
    ELEPHANTS
    <prod>
        <form>inj</form>
        <strength>10, 20, 50</strength>
    </prod>
    <?Fm Condend p-version?>
    ELEPHANTS
    <prod>
        <form>inj</form>
        <strength>10</strength>
        <packsize>0.4 mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>20</strength>
        <packsize>0.4 mL (syringe), 4</packsize>
    </prod>
    <prod>
        <form>inj</form>
        <strength>50</strength>
        <packsize>0.4 mL (syringe), 4</packsize>
    </prod>
    <?Fm Condend e-version?>
</products>

大象
注射
10, 20, 50
大象
注射
10
0.4毫升(注射器),4
注射
20
0.4毫升(注射器),4
注射
50
0.4毫升(注射器),4
test=“'Condstart'”
始终为true,因为如果字符串长度非零,则将其视为true。你的意思是
test=“name()='Condstart'”