首页 > 解决方案 > Ansible XML 模块无法加载/读取外部 dtd 文件中定义的实体

问题描述

我正在尝试解析遵循 DTD 结构的 xml 文件。以下是 DTD 文件的示例:

测试.dtd

<?xml version="1.0" encoding="UTF-8"?>
<! ENTITY TEST  "TEST 123">
<! ELEMENT node EMPTY>
<! ATTLIST node
           name ID #REQUIRED
           description CDATA
>

测试.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE node SYSTEM "file:test.dtd"
[
   <!ENTITY NAME "host1">
]>

<node name= "&NAME;" description="&TEST;">
</node>

测试.yaml

- hosts: localhost
  tasks:
  - xml:
      path: test.xml
      xpath: /node
      content: attribute
      

当我执行以下剧本时,出现错误:

fatal: ..... "msg": "Error while parsing document test.xml (Entity 'TEST' not defined)"

当我在我的 shell(bash) 中运行以下命令时:

xmllint --loaddtd --dtdattr --path . --xpath /node test.xml

它返回值并且不会出错。有没有办法可以访问外部 dtd 文件中定义的变量?或者甚至有没有办法忽略未定义的实体并使用ansible将它们作为纯文本读取?

标签: xmlbashansiblexml-parsing

解决方案


推荐阅读