編集:将来これに来る人にとって、これは不十分に書かれた質問でした。それは私が求めていたものではありませんでした。 この質問はあなたにも役立つかもしれません。
それで、私XSLT
は過去数日間をブラッシュアップしようとしています。私はこれに非常に慣れておらず、過去のほとんどをXQuery
XML の変換に使用していました。かなり単純な問題で立ち往生していますが、周りを見回しても明確な解決策が見つかりません。簡単に言えば、いくつかの要素をその子に応じて 2 つに分割したいと考えています。
たとえば、XML が次のようになっているとします。
<?xml version="1.0" encoding="UTF-8"?>
<root>
<p>
Bacon ipsum dolor sit amet bacon chuck pastrami swine pork rump, shoulder beef ribs doner tri-tip
tongue. Tri-tip ground round short ribs capicola meatloaf shank drumstick short loin pastrami t-
bone. Sirloin turducken short ribs t-bone andouille strip steak pork loin corned beef hamburger
bacon filet mignon pork chop tail.
<note.ref id="0001"><super>1</super></note.ref>
<note id="0001">
<p>
You may need to consult a latin butcher. Good Luck.
</p>
</note>
Pork loin ribeye bacon pastrami drumstick sirloin, shoulder pig jowl. Salami brisket rump ham, tail
hamburger strip steak pig ham hock short ribs jerky shank beef spare ribs. Capicola short ribs swine
beef meatball jowl pork belly. Doner leberkas short ribs, flank chuck pancetta bresaola bacon ham
hock pork hamburger fatback.
</p>
</root>
my を実行するxsl
と、次のようなものが残ります。
<html>
<body>
<p>
Bacon ipsum dolor sit amet bacon chuck pastrami swine pork rump, shoulder beef ribs doner tri-tip
tongue. Tri-tip ground round short ribs capicola meatloaf shank drumstick short loin pastrami t-
bone. Sirloin turducken short ribs t-bone andouille strip steak pork loin corned beef hamburger
bacon filet mignon pork chop tail.
<span class="noteRef" id="0001"><sup>1</sup></span>
<div id="note-0001">
<p>
You may need to consult a latin butcher. Good Luck.
</p>
</div>
Pork loin ribeye bacon pastrami drumstick sirloin, shoulder pig jowl. Salami brisket rump ham, tail
hamburger strip steak pig ham hock short ribs jerky shank beef spare ribs. Capicola short ribs swine
beef meatball jowl pork belly. Doner leberkas short ribs, flank chuck pancetta bresaola bacon ham
hock pork hamburger fatback.
</p>
</body>
</html>
これに関する問題は明らかに、を子としてHTML
<p>
持つことができないことです。これは無効です。クロムなどのブラウザは、最初の段落を にヒットしたときに終了するようにレンダリングし、適切にノートを独自の にラップしますが、ノートの後にテキストを孤立させたままにします。そのため、に適用された CSS は適用されません。<div>
<p>
<div>
<p>
<p>
<p>
要素の子孫に応じて、1 つの要素を 2 つに分割するにはどうすればよいですか?
望ましい出力
<html>
<body>
<p>
Bacon ipsum dolor sit amet bacon chuck pastrami swine pork rump, shoulder beef ribs doner tri-tip
tongue. Tri-tip ground round short ribs capicola meatloaf shank drumstick short loin pastrami t-
bone. Sirloin turducken short ribs t-bone andouille strip steak pork loin corned beef hamburger
bacon filet mignon pork chop tail.
<span class="noteRef" id="0001"><sup>1</sup></span><
</p>
<div id="note-0001">
<p>
You may need to consult a latin butcher. Good Luck.
</p>
</div>
<p>
Pork loin ribeye bacon pastrami drumstick sirloin, shoulder pig jowl. Salami brisket rump ham, tail
hamburger strip steak pig ham hock short ribs jerky shank beef spare ribs. Capicola short ribs swine
beef meatball jowl pork belly. Doner leberkas short ribs, flank chuck pancetta bresaola bacon ham
hock pork hamburger fatback.
</p>
</body>
</html>
私は自分の質問を少し抽象化したので、XSL
私が試したことの以下は少しずれている可能性があります.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
exclude-result-prefixes="xs xd" version="2.0">
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates/>
</body>
</html>
</xsl:template>
<xsl:template match="p">
<p>
<xsl:apply-templates/>
</p>
</xsl:template
<xsl:template match="note.ref">
<span class="noteRef" id="{@id}">
<xsl:apply-templates/>
</span>
</xsl:template>
<xsl:template match="super">
<sup>
<xsl:apply-templates/>
</sup>
</xsl:template>
<xsl:template match="note">
<div id="note-{@id}">
<xsl:apply-templates/>
</div>
</xsl:template>
</xsl:stylesheet>