Wyodrębnienie tekstu między znacznikami

0

Cześć!

Mam mały problem i nie wiem, jak sobie z nim poradzić. Mam kilkaset linii kodu w XML z różnymi znacznikami, a chciałbym wyciągnąć tylko tekst, który znajduje się między znacznikami <base> </base>. Poniżej jest kod. Będę wdzięczny za pomoc.

?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chunkList SYSTEM "ccl.dtd">
<chunkList>
 <chunk id="ch1" type="p">
  <sentence id="s1">
   <tok>
    <orth>Woda</orth>
    <lex disamb="1"><base>woda</base><ctag>subst:sg:nom:f</ctag></lex>
   </tok>
   <tok>
    <orth>jest</orth>
    <lex disamb="1"><base>być</base><ctag>fin:sg:ter:imperf</ctag></lex>
   </tok>
   <tok>
    <orth>jedną</orth>
    <lex disamb="1"><base>jeden</base><ctag>adj:sg:acc:f:pos</ctag></lex>
   </tok>
   <tok>
    <orth>z</orth>
    <lex disamb="1"><base>z</base><ctag>prep:gen:nwok</ctag></lex>
   </tok>
   <tok>
    <orth>najpospolitszych</orth>
    <lex disamb="1"><base>pospolity</base><ctag>adj:pl:gen:m1:sup</ctag></lex>
   </tok>
   <tok>
    <orth>substancji</orth>
    <lex disamb="1"><base>substancja</base><ctag>subst:sg:gen:f</ctag></lex>
   </tok>
   <tok>
    <orth>we</orth>
    <lex disamb="1"><base>w</base><ctag>prep:acc:wok</ctag></lex>
   </tok>
0

js parsing xml w Google.
Na upartego dałoby też radę wyrażeniami regularnymi :-P

2
Patryk27 napisał(a):

js parsing xml w Google.
Na upartego dałoby też radę wyrażeniami regularnymi :-P

Nie traktuje się XML, HTML i podobnych regexami bo wylęgnie się złooooooooo!

const xml = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE chunkList SYSTEM "ccl.dtd">
<chunkList>
 <chunk id="ch1" type="p">
  <sentence id="s1">
   <tok>
    <orth>Woda</orth>
    <lex disamb="1"><base>woda</base><ctag>subst:sg:nom:f</ctag></lex>
   </tok>
   <tok>
    <orth>jest</orth>
    <lex disamb="1"><base>być</base><ctag>fin:sg:ter:imperf</ctag></lex>
   </tok>
   <tok>
    <orth>jedną</orth>
    <lex disamb="1"><base>jeden</base><ctag>adj:sg:acc:f:pos</ctag></lex>
   </tok>
   <tok>
    <orth>z</orth>
    <lex disamb="1"><base>z</base><ctag>prep:gen:nwok</ctag></lex>
   </tok>
   <tok>
    <orth>najpospolitszych</orth>
    <lex disamb="1"><base>pospolity</base><ctag>adj:pl:gen:m1:sup</ctag></lex>
   </tok>
   <tok>
    <orth>substancji</orth>
    <lex disamb="1"><base>substancja</base><ctag>subst:sg:gen:f</ctag></lex>
   </tok>
   <tok>
    <orth>we</orth>
    <lex disamb="1"><base>w</base><ctag>prep:acc:wok</ctag></lex>
   </tok>
  </sentence>
 </chunk>
</chunkList>`;

const parser = new DOMParser();
const doc = parser.parseFromString(xml, 'application/xml');
const output = Array.from(doc.getElementsByTagName('base')).map((base) => base.childNodes[0].nodeValue);
console.log(output); // Array(7) [ "woda", "być", "jeden", "z", "pospolity", "substancja", "w" ]

0

Dziękuję bardzo

0

Przepraszam bardzo, ale mam jeszcze jeden problem. W załączniku zdjęcie, jak wygląda wynik na stronie WWW. Czy jest szansa na usunięcie przecinków i zastąpić je spacjami? Siedzę nad tym jednym problemem już drugą godzinę i nie mogę znaleźć rozwiązania. Próbowałem text.replace, jednak to nie działa. Podejrzewam, że dlatego, iż to jest tablica a nie tekst.

title

0

Pokaż kod.

0
function sprawdz()
	{
	const xml = document.getElementById("pole").value;
	const parser = new DOMParser();
	const doc = parser.parseFromString(xml, 'application/xml');
	const output = Array.from(doc.getElementsByTagName('base')).map((base) => base.childNodes[0].nodeValue);
	document.getElementById("wynik").innerHTML = output;
	}
<textarea rows="30" cols="80" id="pole"></textarea>
<input type="submit" value="sprawdz" onclick="sprawdz()" />

<div id="wynik"></div>
1

output to jest tablica (Array), a nie łańcuch znaków (string).
Możesz przekonwertować tablicę do stringa na wiele sposobów. Najszybciej chyba za pomocą join

1 użytkowników online, w tym zalogowanych: 0, gości: 1