Jak mogę skomentować pojedynczą linię w XML?

123

To raczej weryfikacja, której nie można przegapić.

Czy / n nie ma komentarza liniowego w XML? Tak więc bez bliższego, takiego jak „//”, którego używa kompilator.

Widziałem Jak skomentować blok tagów w XML? i kilka innych dyskusji.

Ten typ komentarza byłby praktyczny, aby zakomentować wiersz bez zawracania sobie głowy jego bliższym położeniem.

Wędrować
źródło
2
XML został zaprojektowany przy założeniu, że narzędzia takie jak edytory często wykonują zawijanie słów i dlatego zakończenia wierszy są kruche. Byłoby złym pomysłem, gdyby końcówki linii musiały być zachowane tylko na wypadek komentarzy.
Michael Kay
2
Z pewnością redaktorzy zawijają tylko wiersze do wyświetlenia . Nigdy nie spotkałem się z przypadkowym dodawaniem twardych znaków nowej linii do samego pliku. To piekielna uciążliwość, gdy nie ma komentarza.
John White,

Odpowiedzi:

147

Nie, nie ma możliwości skomentowania linii w XML i automatycznego zakończenia komentarza w momencie zakończenia linii.

XML ma tylko jedną definicję komentarza :

'<!--' ((Char - '-') | ('-' (Char - '-')))* '-->'

XML zabrania --w komentarzach zachowania zgodności z SGML .

kojiro
źródło
Obejściem problemu jest użycie komentarzy liniowych ( //) i uruchomienie skryptu w celu usunięcia tych komentarzy przed użyciem (może to być częścią jednoetapowego procesu budowania). Dzięki temu korzystanie z komentarzy jest znacznie wygodniejsze. (Użyłem tej techniki ze źródłem WiX (narzędzie instalacyjne dla systemu Windows). Do zbudowania instalatora potrzebnych było kilka innych kroków, więc był to tylko jeden krok do dodania do skryptu / procesu kompilacji.)
Peter Mortensen
20

Jak powiedzieli inni, nie ma możliwości legalnego zrobienia komentarza w jednym wierszu w formacie XML, który komentowałby wiele wierszy, ale istnieją sposoby na ułatwienie komentowania segmentów XML.

Patrząc na poniższy przykład, jeśli dodasz „>” do pierwszego wiersza, XmlTag zostanie odkomentowany. Usuń znak „>”, a zostanie on ponownie zakomentowany. To najprostszy sposób, jaki widziałem, aby szybko komentować / usuwać komentarze z XML-a bez niszczenia rzeczy.

<!-- --
<XmlTag variable="0" />
<!-- -->

Dodatkową korzyścią jest to, że manipulujesz tylko górnym komentarzem, a dolny komentarz może po prostu pozostać tam na zawsze. Łamie to kompatybilność z SGML i niektóre parsery XML będą go łączyć. Dopóki nie jest to trwałe rozwiązanie w Twoim XML-u, a parsery to akceptują, nie stanowi to problemu.

Podświetlacze składni Stack Overflow i Notepad ++ traktują to jak komentarz wieloliniowy, biblioteka Boost w C ++ traktuje to jako komentarz wieloliniowy, a jedyny parser, jaki do tej pory znalazłem, to ten w .NET, a konkretnie C #. Dlatego upewnij się, że najpierw przetestujesz, czy twoje narzędzia, IDE, biblioteki, język itp. Akceptują je przed użyciem.

Jeśli zależy ci na kompatybilności z SGML, po prostu użyj tego:

<!-- -
<XmlTag variable="0" />
<!- -->

Dodaj „->” do górnego komentarza i „-” do dolnego komentarza. Wadą jest konieczność każdorazowej edycji dolnego komentarza, co prawdopodobnie ułatwiłoby wpisywanie za każdym razem <!--na górze i -->na dole.

Chciałbym również wspomnieć, że inni komentatorzy zalecają używanie edytora XML, który umożliwia klikanie prawym przyciskiem myszy i komentowanie / odkomentowywanie bloków XML, co jest prawdopodobnie lepsze niż fantazyjne sztuczki znajdowania / zamieniania (byłoby to również dobrą odpowiedzią samą w sobie, ale nigdy nie korzystałem z takich narzędzi. Chcę tylko upewnić się, że informacje nie zostaną utracone w czasie). Osobiście nigdy nie miałem do czynienia z XML na tyle, aby usprawiedliwić posiadanie edytora bardziej zaawansowanego niż Notepad ++, więc to zależy wyłącznie od Ciebie.

Shaz
źródło
3
Niestety jest to błąd. Spec mówi Dla kompatybilności, łańcuch „-” (myślnik dwukrotnie) nie występuje w komentarzach.
kojiro
2
Oczywiście to nielegalne. Specyfikacja jest w tym jasna. Parsery XML mogą być zgodne z prawem Postela i pozwolić ci ujść na sucho, ale zgodny z przepisami poprawnie sformułowany moduł sprawdzający to oznaczy.
kojiro
4
Jak mówi @kojiro, komentarz zawierający „-” nie jest poprawnie sformułowanym XML. Fraza „Ze względu na zgodność” to jedynie redaktorzy specyfikacji podający powód włączenia tej okropnej reguły: nie oznacza to, że możesz zignorować regułę, jeśli nie jesteś zainteresowany zgodnością. Negowanie odpowiedzi, ponieważ jest ona błędna.
Michael Kay
10
Możesz go napisać <!-- ->i sprawić, że będzie to kwestia dodania myślnika zamiast używania kodu innego niż XML.
kojiro
3
@RyanWH nadal robi to, co działa dla Ciebie, ale wydaje się, że jesteś uzależniony od błędu w parserze XML, którego używasz. Osobiście używam IDE (oXygen), które pozwala mi wybrać fragment tekstu XML, kliknąć prawym przyciskiem myszy i poprosić o komentarz. Co wydaje się o wiele łatwiejsze niż twoja technika.
Michael Kay
12

Działa tak samo jak komentarze blokowe HTML lub JavaScript:

<!-- The to-be-commented XML block goes here. -->
nassim
źródło
5

Nie ortodoksyjny, ale czasami mi się to udaje; ustaw swój komentarz jako inny atrybut:

<node usefulAttr="foo" comment="Your comment here..."/>
j rdl
źródło