根据其他元素属性选择元素

时间:2013-12-20 15:13:27

标签: jquery ajax xml

我有一个XML文档,格式如下:

<CollectionMappingData>
  <ContentTypes>
    <ContentType ContentTypeName="Content Type Name" SomeAttr="ValueINeed" />
  </ContentTypes>
  <CollectionGroup CollectionName="collection_name" ContentTypeName="Content Type Name"/>
  <CollectionGroup CollectionName="collection_name2" ContentTypeName="Content Type Name 2"/>
  <CollectionGroup CollectionName="collection_name3" ContentTypeName="Content Type Name 3"/>
</CollectionMappingData>

根据收藏品名称,我在CollectionName内搜索<CollectionGroup />,然后我尝试根据<ContentType />找到CollectionName。到目前为止,这是我的JS:

<script type="text/javascript">
    $(document).ready(function () {
        $("#inputForm").submit(function(event){
            event.preventDefault();
            var collectionName = $('#collectionName').val(); // User supplied collection name

            $.ajax({
                type: "GET",
                url: "ContentTypeMapData.xml",
                dataType: "xml",
                success: function (xml) {
                    findCollectionGroup(xml, collectionName);
                }
            });

            return false;
        });
    });

    function findCollectionGroup(xml, collectionName) {
        var output = '';
        var collectionGroup = $(xml).find('CollectionGroup[CollectionName=' + collectionName + ']');
        var contentType = $(xml).find('ContentType[ContentTypeName=' + $(collectionGroup).attr('ContentTypeName') + ']');

        output += contentType.attr("SomeAttr");

        $("#xmlDump").append(output);
    }

它似乎没有像我预期的那样找到<ContentType />,即使它确实存在于XML中。我想我在这里缺少一些关于语言如何运作的基本信息。

2 个答案:

答案 0 :(得分:0)

我对语法并不是100%肯定,我现在无法测试它,但你可能正在寻找这样的东西:

findCollectionGroup函数:

function findCollectionGroup(xml, collectionName) {
        var output = '';
        var xmlDoc = $.parseXML( xml );
        $xml = $(xmlDoc);
        $cg = $xml.find("CollectionGroup").attr("CollectionName",collectionName);
        $ct = $xml.find("ContentType").attr("ContentTypeName").each(function() {
            if($(this) == $cg)
                $("#xmlDump").append($(this));
        })
 }

答案 1 :(得分:0)

事实证明ron tornambe是对的。这是我的双引号。我从来没有让他们恰当地匹配,这似乎是我所有问题的根源。这修好了它:

var contentType = $(xml).find('ContentType[ContentTypeName="' + $(collectionGroup).attr("ContentTypeName") + '"]') 

谢谢!