Avertissement: ce qui suit est un péché contre XML. Voilà pourquoi je suis en train de changer avec XSLT :)Préservation de l'attribut d'espace
Mon XML ressemble actuellement à ceci:
<root>
<object name="blarg" property1="shablarg" property2="werg".../>
<object name="yetanotherobject" .../>
</root>
Oui, je suis en train de toutes les données textuelles dans les attributs. J'espère que XSLT peut me sauver; Je veux aller vers quelque chose comme ceci:
<root>
<object>
<name>blarg</name>
<property1>shablarg</name>
...
</object>
<object>
...
</object>
</root>
J'ai en fait eu tout cela de travail jusqu'à présent, à l'exception que mes péchés contre XML ont été plus ... exceptionnelle. Certaines des étiquettes ressemblent à ceci:
<object description = "This is the first line
This is the third line. That second line full of whitespace is meaningful"/>
J'utilise xsltproc sous linux, mais il ne semble pas avoir des options pour préserver les espaces. J'ai essayé d'utiliser xsl: preserve-space et xml: space = "preserve" en vain. Chaque option que j'ai trouvée semble s'appliquer à garder les espaces dans les éléments eux-mêmes, mais pas les attributs. Chaque fois, ce qui précède est changée à:
This is the first line This is the third line. That second line full of whitespace is meaningful
La question est, puis-je conserver les espaces blancs d'attributs?
Vous devez remplacer vos-espaces blancs avec des références d'entités à l'intérieur de la valeur attribe, comme remplacer ' ' avec ''. La normalisation de la valeur de l'attribut (3.3.3) dépend alors du type d'attribut que je pense être 'CDATA' par defatult. Cependant, je pense que vous pouvez le forcer avec '> '- peut ou peut ne pas être correct. Ensuite, si vous avez un XSL vous devez vous assurer de gérer votre espace blanc manuellement, j'ai fait de la même manière que 'string-join()' et 'tokenize()'. –
n611x007
*** Il peut être fait. *** Vous pouvez obtenir un exemple complet ([SSCCE] (http://www.sscce.org/ "Short, autoportantes correct (compilable), exemple")) sur ma réponse à une autre question: http://stackoverflow.com/a/29780972/611007 (comme je l'ai expliqué plus haut, ce n'est pas la façon dont vous essayez de le faire, mais à la fin, il fonctionnera comme vous voulez.) – n611x007
connexe: https://stackoverflow.com/questions/449627/ - en relation: https://stackoverflow.com/questions/2004386/ - à l'adresse: https://stackoverflow.com/questions/1289524/ – n611x007