首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Schematron验证XML

用Schematron验证XML
EN

Stack Overflow用户
提问于 2019-05-28 12:57:28
回答 2查看 131关注 0票数 0

我有以下xml,我想打开大于2的ph元素。

输入:(Xml)

代码语言:javascript
复制
<ul>
 <li>
   <ph>123</ph>
 </li>
 <li>
   <ph>456</ph>
 </li>
 <li>
   <ph>abc</ph>
 </li>
<li>
<ph>xyz</ph>
</li>
</ul>

O/P:

代码语言:javascript
复制
<ul>
 <li>
   <ph>123</ph>
 </li>
 <li>
   <ph>456</ph>
 </li> 
 <li>
abc
 </li>
<li>
xyz
</li>
</ul>

下面的代码无法获得所需的输出

代码语言:javascript
复制
<sch:pattern>
        <sch:rule context="*/ph" role="error">
            <sch:assert test="not(node()>2)" sqf:fix="unwrap"><sch:name/> element not
                allowed</sch:assert>
            <sqf:fix id="unwrap">
                <sqf:description>
                    <sqf:title>unwrap <sch:name/> element</sqf:title>
                </sqf:description>             
                <sqf:replace select="node()"></sqf:replace>
            </sqf:fix>
        </sch:rule>

你好,Shil

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-31 16:38:22

好的,假设您的意思是li元素的索引“大于2”,您可以执行以下操作:

  1. 将上下文设置为li[position() gt 2],以只获得位置大于2的li元素。
  2. 检查是否有ph元素。
  3. 使展开的sqf:fixli元素开始。

解决方案将如下所示:

代码语言:javascript
复制
    <sch:rule context="li[position() gt 2]">
        <sch:report test="ph" sqf:fix="unwrap">ph element not allowed.</sch:report>
        <sqf:fix id="unwrap">
            <sqf:description>
                <sqf:title>Unwrap ph element.</sqf:title>
            </sqf:description>
            <sqf:replace match="ph" select="node()"/>
        </sqf:fix>
    </sch:rule>

另一种方法是将上下文设置为ul。在这种情况下,您只会收到一条错误消息,而QuickFix可以一次完成解压缩。

票数 0
EN

Stack Overflow用户

发布于 2019-06-05 12:31:57

代码语言:javascript
复制
 <sch:pattern>
        <sch:rule context="li[position() &gt; 2]">
            <xsl:variable name="offendingph">
                <xsl:for-each select="child::ph">                
                        <xsl:value-of select="node()"/>
               </xsl:for-each>
            </xsl:variable>                    
            <sch:report test="child::ph" sqf:fix="unwrap">ph element not allowed.</sch:report>
            <sqf:fix id="unwrap">
                <sqf:description>
                    <sqf:title>Unwrap ph element.</sqf:title>
                </sqf:description>
                <sqf:replace match="ph" select="$offendingph"/>
            </sqf:fix>
        </sch:rule>
    </sch:pattern>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56342835

复制
相关文章

相似问题

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