我有一个奇怪的问题,其中XML
包含periods (.)
。
<member>
<name>ABCD</name>
<value>
<date.of.birth>02.05.2000</date.of.birth>
</value>
</member>
由于这个原因,我在解析XML
中的javascript
时遇到了问题。我将此XML
转换为JSON
并使用JSON.parse()
。
如果有效的方法可以使用XML
替换Javascript
代码中的所有句点,请使用下划线或其他内容告诉我们。像下面那样的东西
<member>
<name>ABCD</name>
<value>
<date_of_birth>02.05.2000</date_of_birth>
</value>
</member>
非常感谢。
答案 0 :(得分:1)
使用纯JavaScript可以完成解析:
var text = '<?xml version="1.0" encoding="UTF-8"?><member><name>ABCD</name><value><date.of.birth>02.05.2000</date.of.birth></value></member>';
if (window.DOMParser)
{
var parser = new DOMParser();
var xmlDoc = parser.parseFromString(text, "application/xml");
}
else // Internet Explorer
{
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(text);
}
// access to you DOM elements:
var e = xmlDoc.getElementsByTagName('date.of.birth')[0]
然后,要替换标签,您可以这样做:
var d = xmlDoc.createElement('date_of_birth');
d.innerHTML = e.innerHTML;
e.parentNode.insertBefore(d, e);
e.parentNode.removeChild(e);
// lets see what we have
xmlDoc
<强>更新强>
为了在运行时找到具有特定标记名称的元素,我们可以这样做:
var elements = xmlDoc.getElementsByTagName("*"); // get all them
var matched_elements =[];
for(var i=0; i<elements.length; i++)
{
if ( /\./.test(elements[i].tagName) ) // our filter
{
matched_elements.push(elements[i])
}
}
matched_elements // contains what we expect
答案 1 :(得分:0)
我不确定在JavaScript
中执行此操作很简单。
修改:查看jQuery: how to change tag name?
但是,在XSLT
中执行此操作是。您只需将点名标签与xsl:template
匹配,然后使用自定义名称重新创建。
<xsl:template match="date.of.birth">
<xsl:element name="replace(local-name(), '.', '_')">
<xsl:value-of select="./text()" />
</xsl:element>
</xsl:template>
在此,我根据旧名称创建xsl:element
.
_
(点){{1}}(下划线)