<links>
<osname name="windows xp" links="xyz" />
<osname name="windows 2k" links="xyz" />
</links>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 2k" />
<os name="windows 2003" />
<os name="windows 7" />
</owners>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 95" />
<os name="windows 98" />
<os name="windows vista" />
</owners>
的Javascript
它应该从links-&gt; osname获取链接并将其与所有者匹配 - &gt; os =&gt; name
和os名称只是一次,以后不再重复。
提前致谢
答案 0 :(得分:1)
假设上面存储在变量txt中:
if (window.DOMParser) {
parser=new DOMParser();
xmlDoc=parser.parseFromString(txt,"text/xml");
} else {
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async="false";
xmlDoc.loadXML(txt);
}
然后访问您在javascript中提供的XML:
// links.osname[0].attribute(name)
xmlDoc.childNodes[0].childNodes[0].getAttribute('name');
// outputs: windows xp
// owners.os[2].attribute(name)
xmlDoc.childNodes[1].childNodes[2].getAttribute('name');
// outputs: windows 2003
网上有很多代码解释了所有这些(另请参阅:getNamedItem
,getElementsByTagName
,nodeValue
......以及更多内容
遍历:
for(i=0;i<xmlDoc.childeNodes[1].childNodes.length;i++) {
//Access each node in the set:
xmlDoc.childNodes[1].childNodes[i]
}
答案 1 :(得分:1)
此样式表:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/>
<xsl:key name="kOwnersByName" match="owners" use="@name"/>
<xsl:key name="kOsByOwnerAndName" match="os"
use="concat(../@name,'+++',@name)"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="owners"/>
<xsl:template match="owners[count(.|key('kOwnersByName',@name)[1])=1]">
<xsl:variable name="vOwner" select="@name"/>
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:for-each select="../links/osname/@name">
<xsl:apply-templates
select="key('kOsByOwnerAndName',concat($vOwner,'+++',.))[1]"/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
正确输入:
<root>
<links>
<osname name="windows xp" links="xyz" />
<osname name="windows 2k" links="xyz" />
</links>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 2k" />
<os name="windows 2003" />
<os name="windows 7" />
</owners>
<owners name="microsoft">
<os name="windows xp" />
<os name="windows 95" />
<os name="windows 98" />
<os name="windows vista" />
</owners>
</root>
输出我认为你想要的东西:
<root>
<links>
<osname name="windows xp" links="xyz"></osname>
<osname name="windows 2k" links="xyz"></osname>
</links>
<owners name="microsoft">
<os name="windows xp"></os>
<os name="windows 2k"></os>
</owners>
</root>
答案 2 :(得分:1)
使用xml更方便的方法是使用 jQuery 。
只需检索数据:
$.ajax({ url: '/Document.xml', success: ProcessData, contentType: 'text/xml' });
并做任何你想做的事:
function ProcessData(data) {
var xml = $(data);
xml.find("links osname[name]").each(function () {
var value = $(this).attr("links"));
// etc.
});
}
如果您了解jQuery,那对您来说应该很容易。