从XML标记中删除句点

时间:2014-01-24 08:30:34

标签: javascript xml json

我有一个奇怪的问题,其中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>

非常感谢。

2 个答案:

答案 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

enter image description here

<强>更新

为了在运行时找到具有特定标记名称的元素,我们可以这样做:

 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)

使用jQuery

我不确定在JavaScript中执行此操作很简单。

修改:查看jQuery: how to change tag name?

使用XSLT

但是,在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}}(下划线)