2017-12-30 28 views
0

Ich habe eine XML-Format-Datei mit hinzugefügten und gelöschten Tags.What viele Kategorien außer Birds and Humans.so unter Xml-Datei wird viele Einträge mit verschiedenen Kategorien und viele Werte in ihnen haben unterAnzahl der Einträge in verschiedenen XML-Tags

<xml version=1.0> 
    <NameCategory="Birds"> 
     <Added> 
     <value name="Duck" count="1"></value> 
     <value name="Dove" count="2"></value> 
     </Added> 
     <Deleted> 
     <value name="crow" count="1"></value> 
     <value name="crane" count="10"></value> 
     </Deleted> 
    </NameCategory> 
    <NameCategory="Humans"> 
     <value name="john" count="1"></value> 
    </NameCategory> 
</xml> 

Also hier muss ich total nein zählen. von Einträgen für jede Kategorie in Tags wie als

Total No Of Added Birds=2 
Total No Of Deleted Birds=2 
Total No Of Added Humans=1 
+6

Ihre xml sind nicht gut ausgebildet. Warum glauben Sie, dass textbasierte Lösungen besser sind als spezialisierte xml-basierte Tools? – karakfa

+1

Yeegh. Der Header war offensichtlich defekt, und das Fehlen eines Root-Elements war ein Problem, aber ich vermisste '' und die ungültige Verwendung von einfachen Anführungszeichen auf den ersten Blick - das * wirklich * ist nicht etwas können über XML-fähige Tools gefüttert werden, wodurch eine große Anzahl ansonsten möglicher Antworten abgeschnitten wird. @missi, vielleicht könnten Sie das bearbeiten, um "XML-ähnliche" Syntax zu spezifizieren (wenn Ihre realen Dokumente nicht wirklich XML sind), oder sie bearbeiten, um sie tatsächlich zu analysieren? –

+1

Ihre Datei ist immer noch kein gültiges XML. Fügen Sie Ihre Datei dort ein, um ihre Syntax zu überprüfen: https://validator.w3.org/#validate-by-input – Cyrus

Antwort

2

Mit xmlstarlet und dieser festen XML-Datei:

<?xml version="1.0"?> 
<root> 
    <fixed NameCategory="Birds"> 
    <Added> 
     <value name="Duck" count="1"/> 
     <value name="Dove" count="2"/> 
    </Added> 
    <Deleted> 
     <value name="crow" count="1"/> 
     <value name="crane" count="10"/> 
    </Deleted> 
    </fixed> 
    <fixed NameCategory="Humans"> 
    <value name="john" count="1"/> 
    </fixed> 
</root> 

anzeigen hinzugefügt Vögel:

xmlstarlet select --template --value-of "//root/fixed[@NameCategory='Birds']/Added/value/@name" --nl file.xml 

Ausgang:

 
Duck 
Dove 

Count hinzugefügt Vögel:

xmlstarlet select --template --value-of "count(//root/fixed[@NameCategory='Birds']/Added/value/@name)" file.xml 

Output:

 
2 

Count hinzugefügt und Vögeln und Menschen mit einem Befehl gelöscht:

xmlstarlet select --template \ 
    --value-of "count(//root/fixed[@NameCategory='Birds']/Added/value/@name)" --nl \ 
    --value-of "count(//root/fixed[@NameCategory='Birds']/Added/value/@name)" --nl \ 
    --value-of "count(//root/fixed[@NameCategory='Humans']/value/@name)" --nl file.xml 

Output:

 
2 
2 
1 

mit vorangestelltem Text:

xmlstarlet select --template \ 
    --value-of "concat('Total No Of Added Birds=',count(//root/fixed[@NameCategory='Birds']/Added/value/@name))" --nl \ 
    --value-of "concat('Total No Of Deleted Birds=',count(//root/fixed[@NameCategory='Birds']/Deleted/value/@name))" --nl \ 
    --value-of "concat('Total No Of Added Humans=',count(//root/fixed[@NameCategory='Humans']/value/@name))" --nl file.xml 

Ausgang:

 
Total No Of Added Birds=2 
Total No Of Deleted Birds=2 
Total No Of Added Humans=1 

See: xmlstarlet select --help

+0

Schöne Antwort. Beachten Sie, dass das Root-Element "xml" mit ziemlicher Sicherheit eine verpfuschte XML-Deklaration war (''). Wenn dies wiederhergestellt würde, müsste ein Ersatz-XML-Root-Element vorhanden sein. – kjhughes

+0

@kjhughes: Danke. Ich habe das behoben. – Cyrus

Verwandte Themen