XSLT 改进

2023-12-31

这与XSLT 可以进一步改进吗? https://stackoverflow.com/questions/38989162/can-xslt-be-improved-further/38990027.

我有一个 XML 如下:

XML 示例

<?xml version="1.0" encoding="UTF-8"?>
<Benchmark xmlns="http://checklists.nist.gov/xccdf/1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="xccdf_com.vmware.linux_benchmark_file-test" resolved="1" xml:lang="en-US">
  <status date="2015-09-20">draft</status>
  <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Test content for file_test probe</title>
  <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">File content for OVAL file file_test_content-oval.xml built on 2015-09-20T02:13:56</description>
  <platform idref="cpe:/o:sles11:linux"/>
  <version>v0.0</version>
  <model system="urn:xccdf:scoring:default"/>
  <Profile id="xccdf_com.vmware.linux_profile_test">
    <status date="2015-09-20">draft</status>
    <version update="1" time="2015-09-20T14:57:39.808+05:30">1.0</version>
    <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Test_Profile</title>
    <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en">This is a test profile to test file_test probe.</description>
    <select idref="xccdf_com.vmware.linux_rule_test-def-3" selected="true"/>
    <select idref="xccdf_com.vmware.linux_rule_test-def-2" selected="true"/>
    <select idref="xccdf_com.vmware.linux_rule_test-def-1" selected="true"/>
  </Profile>
  <Group id="xccdf_com.vmware.linux_group_test" weight="1.000000">
    <platform idref="cpe:/o:sles11:linux"/>
    <Rule id="xccdf_com.vmware.linux_rule_test-def-3" selected="true" weight="1.000000" role="full" severity="unknown">
      <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Rule 3 - /etc/passwd file is group-owned by root</title>
      <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This rule verifies that /etc/passwd file is group-owned by root.</description>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:3" href="file_test_content-oval.xml"/>
      </check>
    </Rule>
    <Rule id="xccdf_com.vmware.linux_rule_test-def-2" selected="true">
      <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Rule 2 - /etc/passwd file is owned by root</title>
      <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This rule verifies that /etc/passwd file is owned by root.</description>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:2" href="file_test_content-oval.xml"/>
      </check>
    </Rule>
    <Rule id="xccdf_com.vmware.linux_rule_test-def-1" selected="true">
      <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Rule 1 - /etc/passwd file has permissions of 644 or more restrictive</title>
      <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This rule verifies that /etc/passwd file has permissions of 644 or more restrictive.</description>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:1" href="file_test_content-oval.xml"/>
      </check>
    </Rule>
  </Group>
  <TestResult id="xccdf_org.open-scap_testresult_xccdf_com.vmware.linux_profile_test" start-time="2016-08-17T13:38:29" end-time="2016-08-17T13:38:29" version="v0.0">
    <benchmark href="/tmp/tmp.VnFIMSRKhw/input.xml" id="xccdf_com.vmware.linux_benchmark_file-test"/>
    <title>OSCAP Scan Result</title>
    <identity authenticated="false" privileged="false"/>
    <profile idref="xccdf_com.vmware.linux_profile_test"/>
    <target>vROPS_6-1</target>
    <target-address>127.0.0.1</target-address>
    <target-address>127.0.0.2</target-address>
    <target-address>10.112.56.130</target-address>
    <target-address>0:0:0:0:0:0:0:1</target-address>
    <target-address>fe80:0:0:0:250:56ff:fe93:6159</target-address>
    <target-address>0:0:0:0:0:0:0:10.112.56.130</target-address>
    <target-address>0:0:0:0:0:0:0:127.0.0.2</target-address>
    <target-address>0:0:0:0:0:0:0:127.0.0.1</target-address>
    <target-facts>
      <fact name="urn:xccdf:fact:scanner:name" type="string">OpenSCAP</fact>
      <fact name="urn:xccdf:fact:scanner:version" type="string">1.2.5</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:50:56:93:61:59</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:50:56:93:61:59</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
    </target-facts>
    <platform idref="cpe:/o:sles11:linux"/>
    <rule-result idref="xccdf_com.vmware.linux_rule_test-def-3" role="full" time="2016-08-17T13:38:29" severity="unknown" weight="1.000000">
      <result>pass</result>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:3" href="file_test_content-oval.xml"/>
      </check>
    </rule-result>
    <rule-result idref="xccdf_com.vmware.linux_rule_test-def-2" time="2016-08-17T13:38:29" weight="1.000000">
      <result>pass</result>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:2" href="file_test_content-oval.xml"/>
      </check>
    </rule-result>
    <rule-result idref="xccdf_com.vmware.linux_rule_test-def-1" time="2016-08-17T13:38:29" weight="1.000000">
      <result>pass</result>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:1" href="file_test_content-oval.xml"/>
      </check>
    </rule-result>
    <score system="urn:xccdf:scoring:default" maximum="100.000000">100.000000</score>
  </TestResult>
</Benchmark>

请注意,组和配置文件元素是optional。一个有效的示例 XML也可以是如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Benchmark xmlns="http://checklists.nist.gov/xccdf/1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="xccdf_com.vmware.linux_benchmark_file-test" resolved="1" xml:lang="en-US">
  <status date="2015-09-20">draft</status>
  <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Test content for file_test probe</title>
  <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">File content for OVAL file file_test_content-oval.xml built on 2015-09-20T02:13:56</description>
  <platform idref="cpe:/o:sles11:linux"/>
  <version>v0.0</version>
  <model system="urn:xccdf:scoring:default"/>
  <Rule id="xccdf_com.vmware.linux_rule_test-def-3" selected="true" weight="1.000000" role="full" severity="unknown">
    <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Rule 3 - /etc/passwd file is group-owned by root</title>
    <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This rule verifies that /etc/passwd file is group-owned by root.</description>
    <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
      <check-content-ref name="oval:com.vmware.test.linux:def:3" href="file_test_content-oval.xml"/>
    </check>
  </Rule>
  <Rule id="xccdf_com.vmware.linux_rule_test-def-2" selected="true">
    <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Rule 2 - /etc/passwd file is owned by root</title>
    <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This rule verifies that /etc/passwd file is owned by root.</description>
    <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
      <check-content-ref name="oval:com.vmware.test.linux:def:2" href="file_test_content-oval.xml"/>
    </check>
  </Rule>
  <Rule id="xccdf_com.vmware.linux_rule_test-def-1" selected="true">
    <title xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">Rule 1 - /etc/passwd file has permissions of 644 or more restrictive</title>
    <description xmlns:xhtml="http://www.w3.org/1999/xhtml" xml:lang="en-US">This rule verifies that /etc/passwd file has permissions of 644 or more restrictive.</description>
    <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
      <check-content-ref name="oval:com.vmware.test.linux:def:1" href="file_test_content-oval.xml"/>
    </check>
  </Rule>
  <TestResult id="xccdf_org.open-scap_testresult_default-profile" start-time="2016-08-17T19:18:42" end-time="2016-08-17T19:18:42" version="v0.0">
    <benchmark href="/tmp/tmp.nMXPWBmAJO/input.xml" id="xccdf_com.vmware.linux_benchmark_file-test"/>
    <title>OSCAP Scan Result</title>
    <identity authenticated="false" privileged="false"/>
    <target>vRealizeClusterNode</target>
    <target-address>127.0.0.1</target-address>
    <target-address>127.0.0.2</target-address>
    <target-address>10.112.56.132</target-address>
    <target-address>0:0:0:0:0:0:0:1</target-address>
    <target-address>fe80:0:0:0:250:56ff:fe93:21b6</target-address>
    <target-facts>
      <fact name="urn:xccdf:fact:scanner:name" type="string">OpenSCAP</fact>
      <fact name="urn:xccdf:fact:scanner:version" type="string">1.2.5</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:50:56:93:21:B6</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:00:00:00:00:00</fact>
      <fact name="urn:xccdf:fact:ethernet:MAC" type="string">00:50:56:93:21:B6</fact>
    </target-facts>
    <platform idref="cpe:/o:sles11:linux"/>
    <rule-result idref="xccdf_com.vmware.linux_rule_test-def-3" role="full" time="2016-08-17T19:18:42" severity="unknown" weight="1.000000">
      <result>pass</result>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:3" href="file_test_content-oval.xml"/>
      </check>
    </rule-result>
    <rule-result idref="xccdf_com.vmware.linux_rule_test-def-2" time="2016-08-17T19:18:42" weight="1.000000">
      <result>pass</result>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:2" href="file_test_content-oval.xml"/>
      </check>
    </rule-result>
    <rule-result idref="xccdf_com.vmware.linux_rule_test-def-1" time="2016-08-17T19:18:42" weight="1.000000">
      <result>pass</result>
      <check system="http://oval.mitre.org/XMLSchema/oval-definitions-5">
        <check-content-ref name="oval:com.vmware.test.linux:def:1" href="file_test_content-oval.xml"/>
      </check>
    </rule-result>
    <score system="urn:xccdf:scoring:default" maximum="100.000000">100.000000</score>
  </TestResult>
</Benchmark>

我有兴趣领取idref,以及相应的title and result来自上述两个可能的 xml。

输出只是纯文本,由\n.

我写的XSL如下:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:cdf="http://checklists.nist.gov/xccdf/1.2"
    xmlns:exsl="http://exslt.org/common"
    xmlns:db="http://docbook.org/ns/docbook"
    xmlns:xlink="http://www.w3.org/1999/xlink"
    xmlns="http://docbook.org/ns/docbook"
    xmlns:s="http://open-scap.org/"
    exclude-result-prefixes="xsl cdf db s exsl"
    xmlns:ovalres="http://oval.mitre.org/XMLSchema/oval-results-5"
    xmlns:sceres="http://open-scap.org/page/SCE_result_file"
    >

<xsl:output method="text" encoding="utf-8" />

<xsl:key name="result" match="cdf:rule-result" use="@idref" />

<xsl:template match="/cdf:TestResult">
    <xsl:for-each select="cdf:rule-result">
        <xsl:value-of select="@idref" />
        <xsl:text>&#xa;</xsl:text>
        <xsl:value-of select="cdf:title"/>
        <xsl:text>&#xa;</xsl:text>
        <xsl:value-of select="key('result', @idref)/result"/>
        <xsl:text>&#xa;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

但是,这并没有产生所需的输出?我在这里做错了什么?

请帮忙。


你有几个问题:

  1. TestResult不是根元素,所以你的模板:

    <xsl:template match="/cdf:TestResult">
    

    从未应用过。您看到的输出纯粹是由内置模板规则 https://www.w3.org/TR/xslt/#built-in-rule.

  2. TestResult has no title孩子,所以你的指示:

    <xsl:value-of select="cdf:title"/>
    

    不会返回任何东西。

  3. 当你这样做时:

    <xsl:for-each select="cdf:rule-result">   
    

    你已经处于rule-result,所以你使用密钥是没有意义的。你忘了包括cdf:上的前缀result.


根据您之前的问题,我认为您想回顾一下Rule下的节点Group并获取链接rule-result从那里开始,而不是过去rule-result直接节点:

XSLT 1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:cdf="http://checklists.nist.gov/xccdf/1.2">
<xsl:output method="text" encoding="utf-8" />

<xsl:key name="result" match="cdf:rule-result" use="@idref" />

<xsl:template match="/cdf:Benchmark">
    <xsl:for-each select="cdf:Group/cdf:Rule">
        <xsl:value-of select="@id" />
        <xsl:text>&#xa;</xsl:text>
        <xsl:value-of select="cdf:title"/>
        <xsl:text>&#xa;</xsl:text>
        <xsl:value-of select="key('result', @id)/cdf:result"/>
        <xsl:text>&#xa;</xsl:text>
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

应用于您的输入示例,结果将是:

xccdf_com.vmware.linux_rule_test-def-3
Rule 3 - /etc/passwd file is group-owned by root
pass
xccdf_com.vmware.linux_rule_test-def-2
Rule 2 - /etc/passwd file is owned by root
pass
xccdf_com.vmware.linux_rule_test-def-1
Rule 1 - /etc/passwd file has permissions of 644 or more restrictive
pass
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XSLT 改进 的相关文章

随机推荐

  • 信号处理:FFT 重叠处理资源

    是否有关于重叠处理的任何好的 如果可能是科学的 可用资源 网络或书籍 我对分析信号时使用重叠处理和窗口的效果不太感兴趣 因为要求不同 更多的是关于以下实时情况 我目前正在处理音频信号 将信号分成更小的部分 创建重叠窗口 对加窗块进行 FFT
  • 会话 Bean 丢失?

    对 viewBean 的第一个 非回发 请求 sessionBean 中的 someValue 属性为 null 现在 在回发请求中 我将用户输入设置为 someValue 问题是 someValue 在任何 非回发 请求中始终为 null
  • 代码点火器图像更新

    我遇到了图像上传器的问题 我已经创建了图像上传器 它工作正常 但我还需要编辑它们 当我添加需要的图像时 数据库列会正确更新 但如果不更改图像并保持原样 我会收到错误 Column image 不能为空 这是更新部分的代码 else if t
  • 离开页面之前的 JavaScript

    我想在用户离开页面之前进行确认 如果他说 确定 那么它将重定向到新页面或取消离开 我尝试用 onunload 来实现 h1 h1
  • 错误:对象文件为空 .git/objects/../.. 为空 -- 致命:松散对象...已损坏

    这是过去三周内第五次发生这种情况 我真的很困惑为什么这种情况不断发生 这是我执行 git status 时收到的确切消息 error object file git objects 48 088f00d90b0d27de65336bb9ed
  • 如何以编程方式更改 UITableView 的披露指示器的颜色? [复制]

    这个问题在这里已经有答案了 我知道使用UIImageView我们可以设置披露指示器配件 但我只想更改披露指示器颜色而不使用UIImageView 可能还是不可能 如果可以的话怎么办 添加您自己的披露指标 cell accessoryView
  • Conda 激活/停用环境破坏路径

    我发现当我创建 Conda 环境时source activate environment然后停用该环境source deactivate environment 我的本机 bash 命令不再起作用 我附上了 ls 在启用环境之前工作的图像
  • 线程 - 如何获取父 ID/名称?

    我正在寻找从子线程获取父 ID 或名称的方法 例如 我将主线程作为MainThread 在这个线程中我创建了一些新线程 然后我用threading enumerate 要获取对所有正在运行的线程的引用 请选择一个子线程并以某种方式获取主线程
  • Google Play 管理中心 Play 应用程序签名 - Android 应用程序包未签名

    我正在尝试创建一个游戏商店版本 我已严格按照指南创建上传密钥和密钥库 https developer android com studio publish app signing generate key https developer a
  • shared_from_this 会用 boost::asio 抛出 bad_weak_ptr

    首先 我已阅读列出的所有相关问题 他们说 在使用shared from this之前 你必须有一个现有的shared ptr 据我所知 我不可能违反这个条件 我将 Foo 的实例创建为shared ptr 并强制它始终创建为shared p
  • Spring MVC 中 AJAX 返回 404

    ViewResolver 我的 jsp 位于前缀值指定的正确文件夹中
  • 如何在 VS Code 设置中使用变量?

    在 VS Code 设置中 有一些字段我配置相同 这些就是字体和字体大小 一般来说 我将它们全部设置为相同 我正在尝试在 settings json 中设置一个可以应用于所有变量的变量 读完后变量参考 https code visualst
  • 如何监听 Ace Editor 更改事件并做出反应

    举例说明如何改变时事件在 ACE 编辑器中有效 用一个简单的getValue 当有一个改变时事件并将新文本发送到div See https jsfiddle net ralf htp hbxhgdr1 https jsfiddle net
  • 如何从 R 函数返回“const”data.table?

    如何返回一个const data table从一个R功能 A data table来自data table包是传递给 and 从返回通过引用函数 因此 一个返回 a 的函数data table允许调用函数修改返回值data table 所以
  • 设置 contentURL 时,在 iPhone 4.3 模拟器中再次调用 MPMoviePlayerPlaybackDidFinishNotification

    注意 请参阅底部的更新 我有一个应用程序可以从列表中逐个播放视频 因此 为了测试此功能 我创建了一个只有一个视图控制器的简单应用程序 我在实施之前参考了这个博客this http mobiledevelopertips com video
  • 使用 Parsley 添加自定义多重验证

    是否可以使用 Parsley 添加自定义多重验证 即依赖于多个输入的单个验证 我有时想验证一个
  • 如何使用多个jquery对象变量作为选择器?

    在 jQuery 中 选择多个元素可以这样完成 id1 id2 show 但是当我有两个 jQuery 对象时 我似乎无法使用变量本身选择多个对象 例如 var jqId1 id1 var jqId2 id2 jqId1 show This
  • 什么jsf组件可以渲染div标签?

    Eg h inputText将呈现一个 input type text 什么jsf标签可以渲染 div tag 您可以创建一个DIV组件使用
  • 有哪些高质量的 C 图形库?

    我正在编写一些 C 语言 我需要将一个非常大的图存储为邻接矩阵 我本来打算编写一个快速的图形实现 但想首先询问是否有人们喜欢的 C 而不是 c 好的图形库 我将以某种标准格式 可能是 GML 但这不是成败要求 导入图形 将其存储为邻接矩阵
  • XSLT 改进

    这与XSLT 可以进一步改进吗 https stackoverflow com questions 38989162 can xslt be improved further 38990027 我有一个 XML 如下 XML 示例