Esiste uno strumento in grado di stampare file in formato (pretty-print) e ordinare sia i relativi elementi sia gli attributi?Strumento di ordinamento/formattazione XML
risposta
ho trovato questo post: http://www.biglist.com/lists/xsl-list/archives/200106/msg01225.html che utilizza la seguente XSLT in XML trattino e anche sorta attributi:
<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="*">
<xsl:copy>
<!-- Sort the attributes by name. -->
<xsl:for-each select="@*">
<xsl:sort select="name(.)"/>
<xsl:copy/>
</xsl:for-each>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="text()|comment()|processing-instruction()">
<xsl:copy/>
</xsl:template>
</xsl:stylesheet>
non l'ho ancora provato, ma molto probabilmente continuerò a XSLT a fare la formattazione per me.
Questo è grande per ordina gli attributi xml, come posso ordinare anche i child di un tag? – Natim
Stavo cercando un'utilità simile e non ho trovato quello che stavo cercando, quindi ne ho appena scritto uno. È molto semplice (e non include gli attributi nell'ordinamento dei nodi), ma funziona.
Forse sarà utile per gli altri .. È il GitHub.
Ecco un po 'dalla pagina GitHub ...
USAGE: sortxml.exe [options] infile [outfile]
infile The name of the file to sort, etc.
outfile The name of the file to save the output to.
If this is omitted, then the output is written to stdout.
OPTIONS:
--pretty Ignores the input formatting and makes the output look nice.
--sort Sort both the nodes and attributes.
--sortnode Sort the nodes.
--sortattr Sort the attributes.
(prefix an option with ! to turn it off.)
Il default è di uscita nodi bella e ordinati e gli attributi. Ecco un esempio:
> type sample.xml
<?xml version="1.0" encoding="utf-8" ?><root><node value="one" attr="name"/></root>
> sortxml.exe sample.xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<node attr="name" value="one" />
</root>
mi è piaciuto di questo strumento: https://xmlsorter.codeplex.com/
È possibile ordinare per nome tag e gli attributi. Mi piace usarlo prima di confrontare alcuni file XML.
Questo non caricarebbe nemmeno il file XML. Trovato un errore "XML non valido". Impossibile gestire il tag doctype. Una volta rimosso ha funzionato. – ScrappyDev
Questo ha funzionato per me per un rapido test di un paio di file con oltre 7K di linee e con una struttura xml semi-complessa, quindi sono inizialmente impressionato. Nessun errore. Un download, lancio ed esecuzione facili e veloci. Una cosa da notare è che consente "ordina attributi" e "ordina attributi specifici" e dove scegli quelli che vuoi. Puoi controllare entrambe le opzioni che sembrano sovrapposte. –
Sono "Sort attributes" e "Sort * by * specific attributes", molto diversi. Il primo ordina gli attributi per ogni riga, il secondo ordina tutte le righe in base al contenuto di un attributo specifico. Quest'ultimo è molto pratico, penso. – Gertsen
Fuori di frustrazione con Visual Studio che sembra riordinare & riscrittura EDMX-files (Entity Framework) per tutto il tempo (si veda anche questo Uservoice), ho scritto qualche LINQPad-codice per riordinare roba. È tuttavia facile (e ovvio) utilizzare al di fuori di LinqPad.
Ordina gli elementi per tipo di elemento (tag), quindi per il valore dell'attributo-elemento "Nome", e quindi per altre cose per cercare di renderlo deterministico (diverso xml, ma stesso significato , è [di solito] stesso output - vedi codice).
Inoltre, ordina gli attributi. Si noti che semanticamente XML-attributi possono non avere (rilevante) ordine, ma testualmente che fanno, e sistemi di controllo versione ancora li considerano solo testo ...
(Si noti che non riuscite a rimuovere diversi pseudonimi, accennato nel Entity Framework edmx file regenerating differently amongst team)
void Main()
{
XDocument xdoc = XDocument.Load(@"\\filepath1\file1.edmx");
var orderedElements = CopyAndSortElements(xdoc.Elements());
var newDoc = new XDocument();
newDoc.Add(orderedElements);
newDoc.Save(@"\\filepath1\file1.Ordered.edmx");
}
public IEnumerable<XElement> CopyAndSortElements(IEnumerable<XElement> elements)
{
var newElements = new List<XElement>();
// Sort XElements by Tag & name-attribute (and some other properties)
var orderedElements = elements.OrderBy(elem => elem.Name.LocalName) // element-tag
.ThenByDescending(elem => elem.Attributes("Name").Count()) // can be 0, more than 1 is invalid XML
.ThenBy(elem => (elem.Attributes("Name").Any() ? elem.Attributes("Name").First().Value.ToString() : string.Empty))
// in case of no Name-Attributes, try to sort by (number of) children
.ThenBy(elem => elem.Elements().Count())
.ThenBy(elem => elem.Attributes().Count())
// next line may vary for textually different but semantically equal input when elem & attr were unordered on input, but I need to restrain myself...
.ThenBy(elem => elem.ToString());
foreach (var oldElement in orderedElements)
{
var newElement = new XElement(oldElement.Name);
var orderedAttrs = oldElement.Attributes().OrderBy(attr => attr.Name.LocalName).ThenBy(attr => attr.Value.ToString());
newElement.Add(orderedAttrs);
newElement.Add(CopyAndSortElements(oldElement.Elements()));
newElements.Add(newElement);
}
return newElements;
}
PS: Abbiamo finito con un XSLT, che qualcun altro ha scritto allo stesso tempo. Penso che sia più facile/migliore nel processo di costruzione di tutti. Ma forse/spero che questo sia di qualche utilità per qualcuno.
Cosa hai finito per usare xslt? –
uh, guarda questo - toglie i valori dai nodi come "
Mi sono imbattuto in questo post quando ho cercato di capire come ordinare ed edmx file. La mia soluzione è basata sulla soluzione Arvo Bowens trovato https://stackoverflow.com/a/19324438/212241
void Main()
{
XDocument xdoc = XDocument.Load(@"C:\git\Nvision\Source\NvisionEntities\NvisionModel.edmx");
Sort(xdoc.Root);
xdoc.Save(@"C:\git\Nvision\Source\NvisionEntities\NvisionModel.edmx");
}
public void Sort(XElement source, bool bSortAttributes = true)
{
//Make sure there is a valid source
if (source == null) throw new ArgumentNullException("source");
//Sort attributes if needed
if (bSortAttributes)
{
List<XAttribute> sortedAttributes = source.Attributes().OrderBy(a => a.ToString()).ToList();
sortedAttributes.ForEach(a => a.Remove());
sortedAttributes.ForEach(a => source.Add(a));
}
//Sort the children IF any exist
List<XElement> sortedChildren = source.Elements().OrderBy(elem => elem.Attributes("Name").Any() ? elem.Attributes("Name").First().Value.ToString() : string.Empty).ToList();
if (source.HasElements)
{
source.RemoveNodes();
sortedChildren.ForEach(c => Sort(c));
sortedChildren.ForEach(c => source.Add(c));
}
}
- 1. Strumento di confronto XML/WSDL
- 2. Strumento C++ per generare file XML casuali dallo schema XML?
- 3. Strumento o libreria per confrontare file xml
- 4. Strumento corretto per interfacce XML semplici
- 5. Strumento per convalida dello schema XML XSD
- 6. Strumento per la generazione di grafici da dati Xml
- 7. Strumento Android per generare selettore xml per i pulsanti
- 8. strumento per generare file xml da xsd (per testare)
- 9. Esiste uno strumento per convertire i report XML Emma in formato XML Cobertura?
- 10. Strumento di monitoraggio IIS
- 11. Strumento migliore di responsive.is
- 12. Strumento di regressione CSS?
- 13. Strumento di internazionalizzazione GWT
- 14. Strumento di visualizzazione grafico
- 15. Strumento di documentazione a sorgente singola
- 16. Esiste uno strumento esistente per jsonp come il recupero di xml in jQuery?
- 17. Abbiamo uno strumento per convertire il layout xml di Android in file .java?
- 18. Interpretazione dei risultati dello strumento strumento "Uso di energia"
- 19. Strumento di debug di StatET
- 20. Strumento di progettazione dell'interfaccia utente Android
- 21. Strumento di screenshot per BlackBerry?
- 22. egit strumento di unione disabilitato
- 23. Strumento di test online MySQL
- 24. Strumento di modellazione API REST
- 25. Strumento di annotazione codice sorgente
- 26. Strumento di analisi log SVN
- 27. Strumento di progettazione GUI online
- 28. generico strumento client di sapone
- 29. Buono strumento di performance F #
- 30. Strumento di creazione documentazione Oracle
duplicato: https://stackoverflow.com/q/9161934/492 .. ma le risposte qui erano più utile per me –