【问题标题】:How to parse XML structure with javascript JQuery如何使用 javascript JQuery 解析 XML 结构
【发布时间】:2012-10-08 14:06:35
【问题描述】:

这是 XML 文件:

<Test>
    <Category>
        <SubCat>
            <Name>Name</Name>
            <Properties>
                <Key>Key</Key>
                <Value>Value</Value>
            </Properties>
        </SubCat>
        <SubCat>
            <Name>Name</Name>
            <SubCat>
                <Name>AnotherName</Name>
                <Properties>
                    <Key>Key</Key>
                    <Value>Value</Value>
                </Properties>
            </SubCat>
        </SubCat>
    </Category>
</Test>

我想得到名字。但只有第一个 SubCat 的名称。 和属性键值。问题是 SubCat 存在两次。

我试过了:

$(xml).find('SubCat').each(function() {
    var name = $(this).find("Name").text();
    alert(name);

}

但这会显示第一个和第二个 SubCat 的名称。

我搜索类似的东西。

rootElement(Category).selectallchildren(SubCat).Name for the first SubCat Name
rootElement(Category).selectallchildren(SubCat).(SubCat).Name for the second SubCat Name

同样显式选择键和值

【问题讨论】:

  • api.jquery.com/category/selectors - 应该包含你的答案
  • $(xml).find('SubCat').first()
  • 我试过这个$(xml).find('Category').each(function() { $(xml).find('SubCat:first').each(function() { var name = $(this).find("Name").text(); alert(name); });});,但它只显示第一个子目录项的名称

标签: javascript jquery xml xml-parsing


【解决方案1】:

这里的诀窍是利用 jQuery 评估 CSS3 选择器的能力。

SubCat:nth-of-type(1) 选择带有任意父元素的SubCat 的每一个第一次出现。

所以这应该有效:

$(xml).find("SubCat:nth-of-type(1)").each(function(){
    var name = $(this).find("Name").text(),
        property = { };    //use an object to store the key value tuple
    property[$(this).find("Properties Key").text()] = $(this).find("Properties Value").text();

    console.log(name, property);
});

//Output:
//Name Object { Key="Value" }
//AnotherName Object { Key="Value"}

希望这就是你想要的;在写我的第一个答案时,我显然误解了你的问题,很抱歉造成混乱......

【讨论】:

  • 这行得通。但它只向我显示了类别的名称为“名称”的第一个元素 SubCat。但我也需要第二个。我需要 Category 中的所有 SubCat 及其名称。 Category 下的所有 nextchilds。
  • 好吧,现在我真的很困惑。 ;) 但这完全取决于.find() 中使用的 CSS 选择器。如果您只想要作为Category 的直接子元素的SubCat 元素,请使用选择器Category &gt; SubCat。请注意,您必须使用.find("Name:first").text() 来获取名称。如果我仍然误解你,请准确告诉我你想要哪个输出......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多