ฉันจะแทรกได้อย่างไร
เป็นสไตล์ชีท XSLT ฉันได้รับข้อผิดพลาดนี้:
ข้อผิดพลาดในการแยกวิเคราะห์ XML: เอนทิตีที่ไม่ได้กำหนด
โดยพื้นฐานแล้วฉันต้องการตัวละครที่ไม่มีช่องว่างในเทมเพลต XSLT
ฉันจะแทรกได้อย่างไร
เป็นสไตล์ชีท XSLT ฉันได้รับข้อผิดพลาดนี้:
ข้อผิดพลาดในการแยกวิเคราะห์ XML: เอนทิตีที่ไม่ได้กำหนด
โดยพื้นฐานแล้วฉันต้องการตัวละครที่ไม่มีช่องว่างในเทมเพลต XSLT
คำตอบ:
ใช้รหัสเอนทิตี 
แทน
คือ HTML "การอ้างอิงเอนทิตีของอักขระ" ไม่มีชื่อนิติบุคคลสำหรับพื้นที่ที่ไม่ทำลายในรูปแบบ XML  
เพื่อให้คุณใช้รหัส
Wikipedia มีรายการของเอนทิตี XML และ HTMLและคุณจะเห็นว่ามีเพียง 5 "เอนทิตีที่กำหนดไว้ล่วงหน้า" ใน XML แต่ HTML มีมากกว่า 200 ฉันจะชี้ไปที่การสร้างช่องว่าง (& nbsp;) ใน XSLซึ่งมี คำตอบที่ยอดเยี่ยม
Š
แทนที่จะ 
เป็นหลังซึ่งจะแก้ไขพื้นที่ Unicode ที่ไม่ทำลายเสมอ
 
ทำงานได้ดีจริงๆ อย่างไรก็ตามมันจะแสดงหนึ่งในตัวละครแปลก ๆ เหล่านั้นในการเข้ารหัส ANSI <xsl:text>
ทำงานได้ดีที่สุดสำหรับฉัน
<xsl:text> </xsl:text>
ท่านสามารถทำได้:
<xsl:text disable-output-escaping="yes"><![CDATA[ ]]></xsl:text>
disable-output-escaping
ซึ่งไม่จำเป็นต้องใช้และเลิกใช้ใน XSLT 2.0 และอื่น ๆ ใน 3.0 ในรุ่นเหล่านี้คุณสามารถเข้าถึงเอฟเฟกต์เดียวกันได้ด้วยxsl:character-map
การรับประกันว่าจะสามารถทำงานข้ามโปรเซสเซอร์ได้ นอกจากนี้ยังวางเอนทิตีที่ระบุชื่อ
ไว้ในเอาต์พุตซึ่งไม่จำเป็นต้องเหมือนกับพื้นที่ไม่แตกหักและจุดสิ้นสุดการรับจะต้องมีเอนทิตีนี้ (ใน HTML โดยปกติจะเป็นแบบปริยาย)
ใช้สิ่งนี้
<xsl:text disable-output-escaping="yes">&</xsl:text>nbsp;
แก้ไข: Downvoters อาจตรวจสอบว่างานนี้เป็นครั้งแรก (มันและเป็นวิธีการแก้ปัญหาทั่วไปมากที่สุด)
คุณอาจต้องการเพิ่มคำนิยามสำหรับเอนทิตีนี้ในตอนต้นของไฟล์ (ด้านล่างประกาศ xml):
<!DOCTYPE stylesheet [
<!ENTITY nbsp " " >
]>
นอกจากนี้คุณสามารถเพิ่มเอนทิตีอื่น ๆ เช่น Ntilde, Aacute เป็นต้น
นอกเหนือจากคำตอบของ victor hugoแล้วยังมีความเป็นไปได้ที่จะได้รับการอ้างอิงตัวละครทุกตัวที่ถูกกฎหมายในไฟล์ XSLT ดังนี้:
<!DOCTYPE stylesheet [
<!ENTITY % w3centities-f PUBLIC "-//W3C//ENTITIES Combined Set//EN//XML"
"http://www.w3.org/2003/entities/2007/w3centities-f.ent">
%w3centities-f;
]>
...
<xsl:text>& –</xsl:text>
นอกจากนี้ยังมีความแตกต่างบางอย่างในผลลัพธ์ของวิธีการนี้เมื่อเปรียบเทียบกับ<xsl:text disable-output-escaping="yes">
วิธีหนึ่ง หลังจะผลิตตัวอักษรสตริงเช่น
สำหรับทุกประเภทของการส่งออกแม้สำหรับ<xsl:output method="text">
และสิ่งนี้อาจเกิดขึ้นจะแตกต่างจากสิ่งที่คุณอาจต้องการ ... ในทางกลับกันการกำหนดเอนทิตีสำหรับเท็มเพลต XSLT ผ่าน<!DOCTYPE ... <!ENTITY ...
จะสร้างผลลัพธ์ที่สอดคล้องกับxsl:output
การตั้งค่าของคุณ
และเมื่อรวมการอ้างอิงอักขระทั้งหมดอาจเป็นการดีที่จะใช้ตัวแก้ไขเอนทิตีท้องถิ่นเพื่อป้องกันเอ็นจิ้น XSLT จากการดึงคำจำกัดความของอักขระเอนทิตีจากอินเทอร์เน็ต JAXP หรือผู้ใช้ Xalan-J ที่ชัดแจ้งอาจต้องการแพตช์สำหรับ Xalan-J เพื่อใช้ตัวแก้ไขปัญหาอย่างถูกต้อง ดูบล็อกXSLT, เอนทิตี, Java, Xalan ของฉัน ...สำหรับการดาวน์โหลดแพตช์และความคิดเห็น
เมื่อคุณใช้สิ่งต่อไปนี้ (โดยไม่ต้องdisable-output-escaping
!) คุณจะได้รับพื้นที่ที่ไม่ทำลาย:
<xsl:text> </xsl:text>
disable-output-escaping
สิ่งนี้
สไตล์ชีตXSLTต้องเป็น XML ที่มีรูปแบบที่ถูกต้อง เนื่องจาก" "
ไม่ใช่หนึ่งในเอนทิตี XML ที่กำหนดไว้ล่วงหน้าหนึ่งในห้าจึงไม่สามารถรวมไว้ในสไตล์ชีทได้โดยตรง ดังนั้นการกลับมาที่โซลูชันของคุณ" "
จึงเป็นการทดแทนที่สมบูรณ์แบบที่" "
คุณควรใช้
ตัวอย่าง:
<xsl:value-of select="$txtFName"/> <xsl:value-of select="$txtLName"/>
คุณยังสามารถใช้:
<xsl:value-of select="'&nbsp'"/>
จำแอมป์หลังจาก & หรือคุณจะได้รับข้อความแสดงข้อผิดพลาด
&nbsp;
(สมมติว่าคุณตั้งใจจะใช้เครื่องหมายอัฒภาคเพื่ออยู่ที่นั่น) ซึ่งจะทำให้เหมือน
ไม่ใช่ `` (nb-space)
ฉันพยายามแสดงเส้นขอบบนเซลล์ว่างในตาราง HTML เคล็ดลับเก่า ๆ ของฉันในการใช้พื้นที่ไม่แตกสลายในเซลล์ว่างไม่ได้ทำงานจาก xslt ฉันใช้ตัวแบ่งบรรทัดด้วยเอฟเฟกต์เดียวกัน ฉันพูดถึงเรื่องนี้ในกรณีที่เหตุผลที่คุณพยายามใช้พื้นที่ไม่แบ่งคือให้เนื้อหาบางส่วนแก่เซลล์ตาราง 'ว่าง' เพื่อเปิดใช้เส้นขอบของเซลล์
<br/>
ลองใช้ดู
<xsl:text> </xsl:text>
แต่ขึ้นอยู่กับหน่วยประมวลผล XSLT ที่คุณใช้: ข้อมูลจำเพาะของ XSLT ไม่ต้องการตัวประมวลผล XSLT ในการแปลงเป็น "
"
แม้ว่าคำตอบจะได้รับจาก @brabster และอื่น ๆ
ฉันคิดว่าโซลูชันที่นำมาใช้ซ้ำได้มากขึ้นจะเป็น:
<xsl:variable name="space"> </xsl:variable>
...
<xsl:value-of select="$space"/>