我有一个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中。我想我在这里缺少一些关于语言如何运作的基本信息。
答案 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") + '"]')
谢谢!