Показать список аккаунтов с субсчетами? - PullRequest
0 голосов
/ 16 июля 2010

У меня есть страница, которая получает XML с другого веб-сайта, поэтому я не могу контролировать XML. Он возвращает список учетных записей. В частности, учетные записи QuickBooks. Эти учетные записи могут иметь детей. Тем не менее, нет атрибута «имеет дочерний», только атрибут «имеет родительский». Другими словами, если вы посмотрите на учетную запись, вы можете сказать, что у нее есть родитель, но у вас не будет идеи, если у нее есть дети.

Вот пример двух учетных записей, одна дочерняя от другой.

Ребенок:

<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?

Ex.

  • Банк Запада - ММА
    • Налог на имущество
  • Родительский пункт
    • ребенок 1
    • ребенок 2

и т.д ..

Ответы [ 2 ]

1 голос
/ 17 июля 2010

Предполагая, что все ваши учетные записи находятся в одном и том же 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>

Примечание. В этом примере «Учетные записи» - это ваш корневой узел.Вы не указали имя корневого узла.Изменить: Изменены имена переменных для ясности

0 голосов
/ 17 июля 2010

Я бы не пытался сделать это за один проход. Вместо этого я обработал бы XML и поместил бы его в реляционную базу данных или даже просто превратил XML в разумный json и сохранил его в MongoDB. Затем вы можете запросить его по своему усмотрению и работать с данными со знакомыми структурами данных.

Тот факт, что XML является форматом обмена, не означает, что вам придется работать с ним таким образом. Вы позволяете формату данных, который вы не контролируете, управлять отображением данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...