Mam dokument XML z elementami bez nazwy i chcę użyć XSLT, aby dodać do nich przestrzenie nazw. Większość elementów będzie w przestrzeni nazw A; kilka będzie w przestrzeni nazw B. Jak to zrobić?Dodaj obszar nazw do elementów
Odpowiedz
Z foo.xml
<foo x="1">
<bar y="2">
<baz z="3"/>
</bar>
<a-special-element n="8"/>
</foo>
i foo.xsl
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates match="children()"/>
</B:a-special-element>
</xsl:template>
</xsl:transform>
uzyskać
<foo xmlns="A" x="1">
<bar y="2">
<baz z="3"/>
</bar>
<B:a-special-element xmlns:B="B"/>
</foo>
Czy tego szukasz?
Oto co mam do tej pory:
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="A" >
<xsl:apply-templates />
</xsl:element>
</xsl:template>
<xsl:template match="a-special-element">
<B:a-special-element xmlns:B="B">
<xsl:apply-templates />
</B:a-special-element>
</xsl:template>
To prawie działa; problemem jest to, że nie kopiuje atrybutów. Z tego, co przeczytałem w ten sposób, xsl: element nie ma sposobu na skopiowanie wszystkich atrybutów z elementu tak jak jest (użycie zestawu atrybutów nie wydaje się, aby go wyciąć).
Nie przeczytałeś właściwej dokumentacji. Użyj siły, przeczytaj specyfikację, jest bardzo dobrze napisana i dostępna. – ddaa
Będziesz potrzebować dwóch głównych składników tego przepisu.
Zapasem sosów będzie identity transform, a główny smak zostanie nadany przez atrybut namespace
na xsl:element
.
Poniższy, nietestowany kod, powinien dodać przestrzeń nazw http://example.com/ do wszystkich elementów.
<xsl:template match="*">
<xsl:element name="xmpl:{local-name()}" namespace="http://example.com/">
<xsl:apply-templates select="@*|node()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Wiadomość osobista: Witaj, Jeni Tennison. Wiem, że to czytasz.
- 1. Symfony 2: Dodaj inny obszar nazw do przestrzeni nazw jednostki
- 2. Gdzie znajduje się obszar nazw System.Runtime.Serialization.Json?
- 3. Gdzie znajduje się obszar nazw ConfigurationManager?
- 4. Prywatny obszar nazw w plikach źródłowych
- 5. Czy anonimowy obszar nazw obejmuje wszystkie przestrzenie nazw?
- 6. Szyny 3: Uzyskaj bieżący obszar nazw?
- 7. Czy obszar nazw JQuery jest dobrą praktyką?
- 8. Dodaj nazw i bez nazwisk do Xelement
- 9. Dodaj obiekty do przestrzeni nazw pakietów
- 10. Dodaj ASP.NET MVC obszar do ASP.NET Web Forms istniejącego projektu
- 11. Dodaj funkcję jQuery do konkretnych elementów
- 12. przy użyciu Interop.SHDocVw.dll Gdzie mogę znaleźć ten obszar nazw/dll?
- 13. dlaczego wywoływanie funkcji określającej obszar nazw jest wolniejsze?
- 14. Ruby XML Builder, jak utworzyć ten obszar nazw?
- 15. Qt Creator - niestandardowy obszar nazw dla klas interfejsu użytkownika
- 16. Jak mogę zmienić obszar nazw w każdym węźle w DOM?
- 17. C# dodaj deklarację dla przestrzeni nazw do wszystkich klas
- 18. Dodaj przedrostki i przestrzenie nazw do serializacji XML
- 19. proste xml dodaj przestrzeni nazw dziecko
- 20. Jak dynamicznie uzyskać dostęp do nazw elementów w XAML?
- 21. Konwertuj listę do ramki danych z zachowaniem nazw elementów listy
- 22. Dodaj CSS do reagowania utworzonych elementów, takich jak reaktor danych
- 23. Jak zmienić przestrzenie nazw XML pewnych elementów
- 24. Pobieranie elementów HTML według ich nazw atrybutów
- 25. Dodaj do ICollection
- 26. Dodawanie elementów do listy Java
- 27. Uzyskaj naprawdę użyteczny obszar Groupbox
- 28. Dodaj zegarek bez pełnej przestrzeni nazw w Visual Studio
- 29. Dodaj przestrzeń nazw w xml generowanym przez zapytanie
- 30. LINQ do SQL - nie Dodaj metody Dodaj
Yup; Wyszukałem odpowiedź przed Twoim postem i zasadniczo było to samo. Jedyną różnicą jest to, że zamiast tego używam , ale uważam, że są funkcjonalnie identyczne. –