简单XML
<employee>
<name EmpType="Regular">
<first>Almanzo</first>
<last>Wilder</last>
</name>
</employee>
我正在尝试使用CFSCRIPT来测试是否存在属性“EmpType”
尝试使用isDefined('_ XMLDoc.employee.name [1] .xmlAttributes.EmpType'); 无济于事
尝试使用structkeyexists(_XMLDoc,'employee.name [1] .xmlAttributes.EmpType'); 无济于事
还有其他想法吗?
答案 0 :(得分:4)
我同意StructKeyExists是您想要改变的:
structkeyexists(_XMLDoc,'employee.name[1].xmlAttributes.EmpType')
对此:
structkeyexists(_XMLDoc.employee.name[1].xmlAttributes,'EmpType')
除了你要检查的最后一个项目之外,你想要的是第一个参数。
答案 1 :(得分:0)
试试这个
<cfscript>
employee.name[1].xmlAttributes["EmpType"]
</cfscript>
答案 2 :(得分:0)
我使用CFSCRIPT来解析XML。
当您测试节点是否存在时,您应该使用structKeyExists();这需要两个参数,范围和变量。范围不能用引号括起来。变量必须用引号括起来。
structKeyExists(SCOPE, "Variable");
这可能有点帮助。
// BOOTH NUMBER
BoothInfo.BoothNumber = ResponseNodes[i].BoothNumber.XmlText;
writeOutput("<h3>BoothNumber - #BoothInfo.BoothNumber# </h3>");
// CATEGORIES
if (structKeyExists(ResponseNodes[i].ProductCategories, "Category")) {
Categories = ResponseNodes[i].ProductCategories.Category;
CatIDList = "";
for (j = 1; j lte arrayLen(Categories); j++) {
CatID = ResponseNodes[i].ProductCategories.Category[j].XmlAttributes.ID;
CatIDList = listAppend(CatIDList, CatID);
}
BoothInfo.CatID = CatIDList;
} else {
BoothInfo.CatID = "";
}
writeOutput(BoothInfo.CatID);
答案 3 :(得分:0)
这是我的解决方案:
myEmpType = '';
try{
myEmpType = _XMLDoc.employee.name[1].xmlAttributes["EmpType"];
} catch (Any e) {
myEmpType = 'no category';
}
答案 4 :(得分:0)
使用xmlsearch
。
为了对此进行测试,我在您的XML中添加了更多内容。
<employee>
<name EmpType="Regular">
<first>Almanzo</first>
<last>Wilder</last>
</name>
<name>
<first>Luke</first>
<last>Skywalker</last>
</name>
</employee>
您会注意到您的原始员工拥有EmpType,但第二个没有。
代码有点冗长,但我只想证明它有效。它循环遍历每个name
节点,并检查其中是否有@EmpType
个节点。如果是,则转储该XML节点。
names = xmlsearch(testXML,'employee/name');
for(n=1;n<=arraylen(names);n=n+1){
thisname = names[n];
hasemptype = xmlsearch(thisname,'@EmpType');
if(arraylen(hasemptype)==1){
writedump(thisname);
}
}
答案 5 :(得分:0)
我会使用XPath来处理这个问题:
XmlSearch(xmlObject, "//name[@EmpType]")
上面的表达式返回一个具有属性EmpType的节点数组,如果没有找到则返回一个空数组。因此,您可以检查数组是否为空。如果只需要一个布尔值,可以修改xpath字符串,如下所示:
XmlSearch(xmlObject, "exists(//name[@EmpType])")
此表达式使用xpath函数exists()
,如果找到具有该属性的任何节点,则返回true;如果没有,则返回false。整个表达式返回true或false,而不是第一种情况下的数组。 XmlSearch()
的返回类型根据xpath表达式的返回而变化。