我正在使用 libxml2 来读/写 xml 文件。现在我正在尝试编写一个 CDATA 节点。
这是我尝试过的:
nodePtr = xmlNewChild( parentPtr, NULL, "foo", NULL );
xmlNodeSetContentLen( nodePtr, "<![CDATA[\nTesting 1 < 2\n]]>", len );
Run Code Online (Sandbox Code Playgroud)
但是,这会导致以下编码文本:
<foo><![CDATA[
Testing 1 < 2
]]></foo>
Run Code Online (Sandbox Code Playgroud)
我在想也许有一个特定于 CDATA 的 libxml2 API。或者也许我必须调用其他东西来告诉 libxml2 不要自动编码节点内容?
我的情况是我们使用合同优先方法进行Web服务.我必须使用CDATA来避免需要附加到当前字符串变量的特殊字符.将CDATA标记附加到当前字符串的最佳方法是什么,该字符串作为响应对象中的xml元素返回?我们正在使用C#.
如何使用Delphi从XML文件中提取CData?这是我的XML文件:
<?xml version="1.0"?>
<root>
<PartoBeetaXMLVersion value="0.1">
<VersionID value="111"/>
<Developer value="1Dev"/>
<CDate value="10/12/2011"/>
<Script>
<![CDATA[
alter table tblPersonels
add UID int null,
RID int null
]]>
</Script>
</PartoBeetaXMLVersion>
</root>
Run Code Online (Sandbox Code Playgroud) 我有一个XML文档,格式为...
<?xml version="1.0" encoding="UTF-8"?>
<yahootable>
<row>
<various><![CDATA[ multiline
text, "&"
other <stuff> ]]>
</various>
<id>1</id>
<message><![CDATA[
sdfgsdfg
dsfsdfsd ]]>
</message>
</row>
<yahootable>
Run Code Online (Sandbox Code Playgroud)
...并且想要使用MySQL的LOAD XML LOCAL INFILE将其插入具有列的表中;(各种,ID,消息)。我似乎无法从未解析的CDATA标记中获取任何数据到数据库列中。是CDATA标记之间的数据被完全忽略,还是我错过了某些事情?我期望CDATA会转义非法的XML字符并将其作为常规文本插入。
谢谢。
我正在尝试在其他人创建的 XML 文件中呈现商标(\xe2\x84\xa2) 字符。\n代码如下:
\n\n<head><![CDATA[Product Name™]]></head>\nRun Code Online (Sandbox Code Playgroud)\n\n目前无法正确渲染特殊字符。
\n\n我正在使用 UTF-8 编码:
\n\n非常感谢任何帮助!
\n我正在使用 BeautifulSoup 读取、修改和写入 XML 文件。我在删除 CDATA 部分时遇到了麻烦。这是一个简化的示例。
罪魁祸首 XML 文件:
<?xml version="1.0" ?>
<foo>
<bar><![CDATA[
!@#$%^&*()_+{}|:"<>?,./;'[]\-=
]]></bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
这是 Python 脚本。
from bs4 import BeautifulSoup
xmlfile = open("cdata.xml", "r")
soup = BeautifulSoup( xmlfile, "xml" )
print(soup)
Run Code Online (Sandbox Code Playgroud)
这是输出。请注意缺少 CDATA 部分标记。
<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar>
!@#$%^&*()_+{}|:"<>?,./;'[]\-=
</bar>
</foo>
Run Code Online (Sandbox Code Playgroud)
我也尝试打印soup.prettify(formatter="xml")并得到相同的结果,但空白略有不同。关于在 CDATA 部分中阅读的文档并不多,所以也许这是一lxml件事?
有没有办法告诉 BeautifulSoup 保留 CDATA 部分?
更新是的,这是一个 lxml 的事情。 http://lxml.de/api.html#cdata 那么,问题就变成了,是否可以告诉 BeautifulSoup 用 初始化 lxml strip_cdata=False?
我对 Ruby 很陌生,并且尝试使用 REXML 解析 XML 文档,该文档之前已(通过 REXML)进行了漂亮的打印,但结果有点不稳定。
某些 CDATA 部分在开始 XML 标记之后、但在 CDATA 块开始之前有一个换行符,在这些情况下,REXML 会将标记的文本解析为空。
下面是一个 XML 文档示例(经过大量删节):
<?xml version="1.0" encoding="utf-8"?>
<root-tag>
<content type="base64"><![CDATA[V2VsbCBkb25lISBJdCB3b3JrcyA6KQ==]]></content>
<content type="base64">
<![CDATA[VGhpcyB3b250IHdvcms=]]></content>
<content><![CDATA[This will work]]></content>
<content>
<![CDATA[This will not appear]]></content>
<content>
Seems happy</content>
<content>Obviously no problem</content>
</root-tag>
Run Code Online (Sandbox Code Playgroud)
这是我的 Ruby 脚本(精简为一个最小的示例):
require 'rexml/document'
require 'base64'
include REXML
module RexmlSpike
file = File.new("ex.xml")
doc = Document.new file
doc.elements.each("root-tag/content") do |contentElement|
if contentElement.attributes["type"] == "base64"
puts "decoded: " << Base64.decode64(contentElement.text) …Run Code Online (Sandbox Code Playgroud) I am trying to add a <![CDATA[]]> to wrap a group of elements.
Input:
<?xml version="1.0" encoding="UTF-8"?>
<params>
<param dataType="java.lang.String">respID</param>
<param dataType="java.lang.Date">2015-11-04</param>
<param dataType="java.lang.String">
<XX_IL_OLM_COMP_ELEMENT_OBJ><P_OLM_COMP_ELEMENT>
<XX_IL_OLM_COMP_ELEMENT_OBJ>
<P_ACTION>CREATE</P_ACTION>
<p_activity_version_id>12</p_activity_version_id>
</XX_IL_OLM_COMP_ELEMENT_OBJ>
</P_OLM_COMP_ELEMENT>
</XX_IL_OLM_COMP_ELEMENT_OBJ>
</param>
</params>
Run Code Online (Sandbox Code Playgroud)
Desired output:
<?xml version="1.0" encoding="UTF-8"?>
<params>
<param dataType="java.lang.String">respID</param>
<param dataType="java.lang.Date">2015-11-04</param>
<param dataType="java.lang.String">
<![CDATA[
<XX_IL_OLM_COMP_ELEMENT_OBJ><P_OLM_COMP_ELEMENT>
<XX_IL_OLM_COMP_ELEMENT_OBJ>
<P_ACTION>CREATE</P_ACTION>
<p_activity_version_id>12</p_activity_version_id>
</XX_IL_OLM_COMP_ELEMENT_OBJ>
</P_OLM_COMP_ELEMENT>
</XX_IL_OLM_COMP_ELEMENT_OBJ>
]]>
</param>
</params>
Run Code Online (Sandbox Code Playgroud)
Basically when I have child elements for element param, I need to wrap the child elements inside CDATA.
我正在尝试使用 HTMLQuestion 数据结构和 boto3 的create_hit函数构建 XML 以提交给 Amazon 的 Mechanical Turks 服务。根据文档,XML 的格式应该是这样的。
我创建了一个类TurkTaskAssembler,它具有生成 xml 并通过 API 将此 XML 传递到 Mechanical Turks 平台的方法。我使用 boto3 库来处理与亚马逊的通信。
我生成的 XML 的格式似乎不正确,因为当我尝试通过 API 传递此 XML 时,出现验证错误,如下所示:
>>> tta = TurkTaskAssembler("What color is the sky?")
>>> response = tta.create_hit_task()
>>> ParamValidationError: Parameter validation failed: Invalid type for parameter Question, value: <Element HTMLQuestion at 0x1135f68c0>, type: <type 'lxml.etree._Element'>, valid types: <type 'basestring'>
Run Code Online (Sandbox Code Playgroud)
然后我修改了create_question_xml使用该tostring方法将 XML 信封转换为字符串的方法,但这会产生不同的错误:
>>> …Run Code Online (Sandbox Code Playgroud) 我正在尝试将现有的 Xml 文件转换为另一个 xml 文件,并添加一些节点。但是,当我解析原始 xml 文件并将其写入另一个 xml 文件时,它会从输出 xml 中删除所有CDATA 。我怎样才能避免它?
这是我的代码:
tree = ET.parse(r'inputData.xml')
root = tree.getroot()
c = ET.Element("c")
c.text = "3"
root.insert(1, c)
tree.write("outputData.xml")
Run Code Online (Sandbox Code Playgroud)
这是我的输入 XML
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE Map[]>
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="rgba(0, 0, 0, 0)" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
<Style filter-mode="first" name="boundary">
<Rule>
<PolygonSymbolizer fill="#000000" fill-opacity="1" />
</Rule>
</Style>
<Layer name="boundary" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<StyleName>boundary</StyleName>
<Datasource>
<Parameter name="type"><![CDATA[postgis]]></Parameter>
<Parameter name="table"><![CDATA[("select * …Run Code Online (Sandbox Code Playgroud)