我有一些包含XHTML字符实体的字符串:
"They're quite varied"
"Sometimes the string ∈ XML standard, sometimes ∈ HTML4 standard"
"Therefore -> I need an XHTML entity decoder."
"Sadly, some strings are not valid XML & are not-quite-so-valid HTML <- but I want them to work, too."
Run Code Online (Sandbox Code Playgroud)
有没有简单的方法来解码实体?(我正在使用 Java)
我目前正在StringEscapeUtils.unescapeHtml4(myString.replace("'", "\'"))用作临时黑客。可悲的是,org.apache.commons.lang3.StringEscapeUtils有unescapeHtml4和unescapeXML,但没有unescapeXhtml。
编辑:我确实想处理无效的 XML,例如我想要“&&xyzzy;” 解码为“&&xyzzy;”
编辑:我认为 HTML5 具有与 XHTML 几乎相同的字符实体,所以我认为 HTML 5解码器也可以。
我有一个脚本,使用lxml.etree以下方法解析XML :
from lxml import etree
parser = etree.XMLParser(load_dtd=True, resolve_entities=True)
tree = etree.parse('main.xml', parser=parser)
Run Code Online (Sandbox Code Playgroud)
我需要load_dtd=True和resolve_entities=True可以具有&emptyEntry;从globals.xml解决:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE map SYSTEM "globals.xml" [
<!ENTITY dirData "${DATADIR}">
]>
<map
xmlns:map="http://my.dummy.org/map"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsschemaLocation="http://my.dummy.org/map main.xsd"
>
&emptyEntry; <!-- from globals.xml -->
<entry><key>KEY</key><value>VALUE</value></entry>
<entry><key>KEY</key><value>VALUE</value></entry>
</map>
Run Code Online (Sandbox Code Playgroud)
同 globals.xml
<?xml version="1.0" encoding="UTF-8"?>
<!ENTITY emptyEntry "<entry></entry>">
Run Code Online (Sandbox Code Playgroud)
现在我想从非标准lxml转向标准xml.etree.但这与我的文件失败,因为load_dtd=True并且resolve_entities=True不受支持xml.etree.
是否有xml.etree解决这些实体的问题?
对于我的生活,我无法理解实体处理的XML :: Twig文档.
我有一些用HTML :: Tidy生成的XML.电话如下:
my $tidy = HTML::Tidy->new({
'indent' => 1,
'break-before-br' => 1,
'output-xhtml' => 0,
'output-xml' => 1,
'char-encoding' => 'raw',
});
$str = "foo bar";
$xml = $tidy->clean("<xml>$str</xml>");
Run Code Online (Sandbox Code Playgroud)
产生:
<html>
<head>
<meta content="tidyp for Linux (v1.02), see www.w3.org" name="generator" />
<title></title>
</head>
<body>foo bar</body>
</html>
Run Code Online (Sandbox Code Playgroud)
XML :: Twig(可以理解)barf .我想做一些转换,通过XML :: Twig运行它:
my $twig = XML::Twig->new(
twig_handlers => {... handlers ...}
);
$twig->parse($xml);
Run Code Online (Sandbox Code Playgroud)
该$twig->parse行barfs的 ,但我无法弄清楚如何添加 元素编程.我尝试过这样的事情:
my …Run Code Online (Sandbox Code Playgroud) 什么是非数字化HTML/XML实体的良好实现,例如 用ASCII等效替换它们?
表示为单元测试:
local orig = "It's the "end" &ok; "
local fixd = unescape(orig) -- Implement this
assert( fixd == "It's the \"end\" &ok;\n" )
Run Code Online (Sandbox Code Playgroud) 我正在编写一个 PHP 脚本来生成一些 xml 文档,但我在 SimpleXML 和引号方面遇到了一些问题。
如果我有这样的代码:
$xml = new SimpleXMLElement('<myxml />');
$xml->addChild('title','My Feed');
$xml->addChild('description','Entity data here - & " '');
Run Code Online (Sandbox Code Playgroud)
如果我 print_r $xml obj 然后我得到这个:
print_r($xml);
SimpleXMLElement Object
(
[title] => My Feed
[description] => Entity data here - & " '
)
Run Code Online (Sandbox Code Playgroud)
似乎一旦在对象中,它就会使实体回到各自的角色。但是,当我在对象上调用 asXML() 以获取 XML 时,它向我显示了以下内容:
echo $xml->asXML();
<?xml version="1.0"?>
<myxml>
<title>My Feed</title>
<description>Entity data here - & " '</description>
</myxml>
Run Code Online (Sandbox Code Playgroud)
它使 & 返回一个实体,但它似乎将引号保留为字符。它不应该将它们全部转换为实体吗?