标签: cdata

如何使用 libxml2 编写 CDATA 节点?

我正在使用 libxml2 来读/写 xml 文件。现在我正在尝试编写一个 CDATA 节点。

这是我尝试过的:

nodePtr = xmlNewChild( parentPtr, NULL, "foo", NULL );
xmlNodeSetContentLen( nodePtr, "<![CDATA[\nTesting 1 < 2\n]]>", len );
Run Code Online (Sandbox Code Playgroud)

但是,这会导致以下编码文本:

<foo>&lt;![CDATA[
Testing 1 &lt; 2
]]&gt;</foo>
Run Code Online (Sandbox Code Playgroud)

我在想也许有一个特定于 CDATA 的 libxml2 API。或者也许我必须调用其他东西来告诉 libxml2 不要自动编码节点内容?

cdata libxml2

4
推荐指数
1
解决办法
3799
查看次数

将CDATA附加到字符串

我的情况是我们使用合同优先方法进行Web服务.我必须使用CDATA来避免需要附加到当前字符串变量的特殊字符.将CDATA标记附加到当前字符串的最佳方法是什么,该字符串作为响应对象中的xml元素返回?我们正在使用C#.

c# xml cdata

4
推荐指数
1
解决办法
9369
查看次数

Delphi和XML CDATA

如何使用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 delphi cdata

4
推荐指数
1
解决办法
2849
查看次数

MySQL LOAD XML INFILE的问题

我有一个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 mysql cdata load-data-infile

4
推荐指数
1
解决办法
2356
查看次数

CDATA 代码块中的特殊字符

我正在尝试在其他人创建的 XML 文件中呈现商标(\xe2\x84\xa2) 字符。\n代码如下:

\n\n
<head><![CDATA[Product Name&#153;]]></head>\n
Run Code Online (Sandbox Code Playgroud)\n\n

目前无法正确渲染特殊字符。

\n\n

我正在使用 UTF-8 编码:

\n\n

非常感谢任何帮助!

\n

cdata special-characters

4
推荐指数
1
解决办法
1万
查看次数

BeautifulSoup 可以保留 CDATA 部分吗?

我正在使用 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>
        !@#$%^&amp;*()_+{}|:"&lt;&gt;?,./;'[]\-=
    </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

python xml lxml beautifulsoup cdata

4
推荐指数
1
解决办法
1872
查看次数

为什么 REXML 无法解析换行符前面的 CDATA?

我对 Ruby 很陌生,并且尝试使用 REXML 解析 XML 文档,该文档之前已(通过 REXML)进行了漂亮的打印,但结果有点不稳定。

某些 CDATA 部分在开始 XML 标记之后、但在 CDATA 块开始之前有一个换行符,在这些情况下,REXML 会将标记的文本解析为空。

  • 知道我是否可以让 REXML 来读取这些行吗?
  • 如果没有,我可以用正则表达式或其他东西预先重写它们吗?
  • 这还是有效的 XML 吗?

下面是一个 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)

ruby xml cdata rexml

4
推荐指数
1
解决办法
1436
查看次数

Surround XML elements with CDATA section via XSLT

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.

xml xslt cdata

4
推荐指数
1
解决办法
2867
查看次数

为 boto3 MTurk 构建 HTMLQuestion XML

我正在尝试使用 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 lxml cdata boto3

4
推荐指数
1
解决办法
841
查看次数

在解析 XML 时保留 CDATA 部分

我正在尝试将现有的 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&quot; background-color=&quot;rgba(0, 0, 0, 0)&quot; maximum-extent=&quot;-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)

python xml cdata elementtree

4
推荐指数
1
解决办法
4269
查看次数