我有一个从另一个网站接收xml的页面,所以我无法控制xml。它返回一个帐户列表。具体来说,QuickBooks帐户。这些帐户可以有孩子。但是,没有“has child”属性,只有“has parent”属性。换句话说,如果你看一个帐户,你可以告诉它有一个父母,但如果它有任何孩子你就没有理想。
以下是两个帐户的示例,一个是另一个帐户的子项。
孩子:
<Account>
<Id idDomain="QB">288</Id>
<SyncToken>1</SyncToken>
<MetaData>
<CreatedBy>app</CreatedBy>
<CreatedById>1</CreatedById>
<CreateTime>2010-06-16T21:47:58.0Z</CreateTime>
<LastModifiedBy>app</LastModifiedBy>
<LastModifiedById>1</LastModifiedById>
<LastUpdatedTime>2010-06-16T21:47:58.0Z</LastUpdatedTime>
</MetaData>
<ExternalKey idDomain="QB">288</ExternalKey>
<Synchronized>true</Synchronized>
<Name>Property Tax Reserve</Name>
<AccountParentId idDomain="QB">272</AccountParentId>
<AccountParentName>Bank of the West - MMA</AccountParentName>
<Active>true</Active>
<Type>Asset</Type>
<Subtype>Bank</Subtype>
<CurrentBalance>0</CurrentBalance>
</Account>
父母:
<Account>
<Id idDomain="QB">272</Id>
<SyncToken>1</SyncToken>
<MetaData>
<CreatedBy>app</CreatedBy>
<CreatedById>1</CreatedById>
<CreateTime>2009-03-19T21:34:22.0Z</CreateTime>
<LastModifiedBy>app</LastModifiedBy>
<LastModifiedById>1</LastModifiedById>
<LastUpdatedTime>2009-03-19T21:34:22.0Z</LastUpdatedTime>
</MetaData>
<ExternalKey idDomain="QB">272</ExternalKey>
<Synchronized>true</Synchronized>
<Name>Bank of the West - MMA</Name>
<Active>true</Active>
<Type>Asset</Type>
<Subtype>Bank</Subtype>
<CurrentBalance>4625.93</CurrentBalance>
</Account>
因此,在一堆帐户(无特定顺序)的列表中,我将如何循环以在ColdFusion中以分层方式显示它们?
实施例
等。
答案 0 :(得分:1)
假设您的帐户都在同一个XML文件中,您可以使用XPath查找父母和子女。
<cfscript>
xmlDoc=XMLParse("yourfile.xml");
listParents = XmlSearch(xmlDoc, "//Account[not(AccountParentName)]");
writeoutput("<ul>");
for (i = 1; i LTE ArrayLen(listParents); i = i + 1) {
writeoutput("<li>" & listParents[i].Name.XmlText);
listChildren = XmlSearch(xmlDoc, "//Account[AccountParentId=#listParents[i].Id.XmlText#]");
if(ArrayLen(listChildren)) {
writeoutput("<ul>");
for (i = 1; i LTE ArrayLen(listChildren); i = i + 1) {
writeoutput("<li>" & listChildren[i].Name.XmlText);
}
writeoutput("</ul>");
}
writeoutput("</li>");
}
writeoutput("</ul>");
</cfscript>
注意:“帐户”是此示例中的根节点。您没有指定根节点名称。 编辑:为清晰起见更改了变量名称
答案 1 :(得分:0)
我不会在一次通过中尝试这样做。相反,我会处理XML并将其放入关系数据库,甚至只需将XML转换为合理的json并将其存储在MongoDB中。然后,您可以根据需要查询它,并使用熟悉的数据结构处理数据。
仅仅因为XML是交换格式并不意味着你必须以这种方式使用它。您要让您无法控制的数据格式控制显示数据的方式。