我有一个生成纯HTML的XSLT文件.我需要在CDATA块中包装一些元素,因此打算使用cdata-section-elements.但是,如果我想要包含CDATA的元素<p>在页面上只有一个,那么如何让它不将CDATA放在所有其他<p>元素中呢?
输入数据是这样的:
<item>
...
<g:category>Gifts under &pound;10</g:category>
</item>
Run Code Online (Sandbox Code Playgroud)
我的XSL是:
<xsl:element name="a">
<xsl:attribute name="href">productlist.aspx</xsl:attribute>
<xsl:copy-of select="text()" />
</xsl:element>
Run Code Online (Sandbox Code Playgroud)
我想要这样做:
Gifts under £10
Run Code Online (Sandbox Code Playgroud)
但我得到的只是:
Gifts under £10
Run Code Online (Sandbox Code Playgroud) 我想在javascript变量中存储一些HTML/XML标记.问题是文本比较大.例如,如何将以下XML片段存储在javascript变量中?
<QuestionForm xmlns="[the QuestionForm schema URL]">
<Overview>
<Title>Game 01523, "X" to play</Title>
<Text>
You are helping to decide the next move in a game of Tic-Tac-Toe. The board looks like this:
</Text>
<Binary>
<MimeType>
<Type>image</Type>
<SubType>gif</SubType>
</MimeType>
<DataURL>http://tictactoe.amazon.com/game/01523/board.gif</DataURL>
<AltText>The game board, with "X" to move.</AltText>
</Binary>
<Text>
Player "X" has the next move.
</Text>
</Overview>
<Question>
<QuestionIdentifier>nextmove</QuestionIdentifier>
<DisplayName>The Next Move</DisplayName>
<IsRequired>true</IsRequired>
<QuestionContent>
<Text>
What are the coordinates of the best move for player "X" in this game?
</Text>
</QuestionContent>
<AnswerSpecification> …Run Code Online (Sandbox Code Playgroud) 所以,我有一个庞大的XML文件,我想删除所有CDATA部分,并用安全的,HTML编码的文本节点替换CDATA节点内容.
用正则表达式剥离CDATA当然会破坏解析.是否有LINQ或XmlDocument或XmlTextWriter技术将CDATA与编码文本交换?
我还不太关心最终的编码,只是如何用我选择的编码替换这些部分.
原始例子
---
<COLLECTION type="presentation" autoplay="false">
<TITLE><![CDATA[Rights & Responsibilities]]></TITLE>
<ITEM id="2802725d-dbac-e011-bcd6-005056af18ff" presenterGender="male">
<TITLE><![CDATA[Watch the demo]]></TITLE>
<LINK><![CDATA[_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4]]></LINK>
</ITEM>
</COLLECTION>
---
Run Code Online (Sandbox Code Playgroud)
应该成为
<COLLECTION type="presentation" autoplay="false">
<TITLE>Rights & Responsibilities</TITLE>
<ITEM id="2802725d-dbac-e011-bcd6-005056af18ff" presenterGender="male">
<TITLE>Watch the demo</TITLE>
<LINK>_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4</LINK>
</ITEM>
</COLLECTION>
Run Code Online (Sandbox Code Playgroud)
我想最终的目标是转向JSON.我试过这个
XmlDocument doc = new XmlDocument();
doc.Load(Server.MapPath( @"~/somefile.xml"));
string jsonText = JsonConvert.SerializeXmlNode(doc);
Run Code Online (Sandbox Code Playgroud)
但我最终得到了丑陋的节点,即"#cdata-section"键.WAAAAY需要花费很多时间才能重新开发前端以接受这一点.
"COLLECTION":[{"@type":"whitepaper","TITLE":{"#cdata-section":"SUPPORTING DOCUMENTS"}},{"@type":"presentation","@autoplay":"false","TITLE":{"#cdata-section":"Demo Presentation"},"ITEM":{"@id":"2802725d-dbac-e011-bcd6-005056af18ff","@presenterGender":"male","TITLE":{"#cdata-section":"Watch the demo"},"LINK":{"#cdata-section":"_assets/2302725d-dbac-e011-bcd6-005056af18ff/presentation/presentation-00000000.mp4"}
Run Code Online (Sandbox Code Playgroud) 我正在写一份关于 HTML 中的 XML 注入攻击的报告。因此,我将拥有(损坏的)HTML 内容作为我的 HTML 的内容。因此,我试图将我的 HTML 内容包装在 CDATA 块中,但它似乎确实呈现正确。
我有(由 W3C 验证)文档:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>report</title>
</head>
<body>
<div><![CDATA[AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">]]></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
根据我对维基百科文章的理解,这意味着内容应该“标记为解析器仅将其解释为字符数据,而不是标记”。所以输出应该是
AuthType=<META HTTP-EQUIV="Set-Cookie" Content="USERID=<SCRIPT>alert('XSS')</SCRIPT>">
Run Code Online (Sandbox Code Playgroud)
然而,在两者Chrome 21.0.1180.60 m和Firefox 14.0.1所有呈现的是
]]>
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?不应该从第一个<![CDATA[到第一个的所有内容都]]>出现在屏幕上,就好像每个字符都已被转义一样?
有人问我是否可以使用 xsl (1.0) 转换 xml,但即使其中没有内容也保留 CDATA 元素。作为 xsl 初学者,我对这个问题有点不知所措......
这是一个简单的示例。
我拥有的
<AMOUNT/>
Run Code Online (Sandbox Code Playgroud)
我想要的是
<AMOUNT><![CDATA[]]></AMOUNT>
Run Code Online (Sandbox Code Playgroud)
(看看 AMOUNT 元素)
这是我的示例 xml
<?xml version="1.0" encoding="iso-8859-1" ?>
<Artikel>
<Temp>
<Zeile>107</Zeile>
<Artikelzubehoerdaten>
<Artikelzubehoerdaten>
<ZubehoerID>18</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>1</UrsprungsArt>
<Ursprungsnummer>99100091</Ursprungsnummer>
<UrsprungsAuspraegungID>0</UrsprungsAuspraegungID>
<ZubehoerArt>1</ZubehoerArt>
<Zubehoernummer>00500041</Zubehoernummer>
<ZubehoerAuspraegungID>0</ZubehoerAuspraegungID>
<Automatisch>0</Automatisch>
<Mengenberechnung>1</Mengenberechnung>
<MengenFaktor>1.0000</MengenFaktor>
<Basismengeneinheit>Stk</Basismengeneinheit>
<Preisgrundlagen>2</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAAEbVw=</Timestamp>
<Gruppendaten/>
</Artikelzubehoerdaten>
<Artikelzubehoerdaten>
<ZubehoerID>19</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>1</UrsprungsArt>
<Ursprungsnummer>99100091</Ursprungsnummer>
<UrsprungsAuspraegungID>0</UrsprungsAuspraegungID>
<ZubehoerArt>2</ZubehoerArt>
<Zubehoernummer>100</Zubehoernummer>
<Automatisch>0</Automatisch>
<Mengenberechnung>0</Mengenberechnung>
<MengenFaktor>0.0000</MengenFaktor>
<Preisgrundlagen>0</Preisgrundlagen>
<ManuellerPreis>0.0000</ManuellerPreis>
<PreislisteID>0</PreislisteID>
<Timestamp>AAAAAAAEbWA=</Timestamp>
<Gruppendaten>
<ZubehoerID>1</ZubehoerID>
<Mandant>88</Mandant>
<UrsprungsArt>2</UrsprungsArt>
<Ursprungsnummer>100</Ursprungsnummer>
<ZubehoerArt>1</ZubehoerArt>
<Zubehoernummer>10300003</Zubehoernummer>
<ZubehoerAuspraegungID>0</ZubehoerAuspraegungID>
<Automatisch>0</Automatisch>
<Mengenberechnung>2</Mengenberechnung>
<MengenFaktor>1.0000</MengenFaktor> …Run Code Online (Sandbox Code Playgroud) 我正在开发一个项目,其中包括在xml上应用一些xslt.
我的输入xml在任何xml节点中都包含"CDATA".
现在我想要的是它应该保留"CDATA",如果它在输入中
我尝试了许多解决方案,如disable-output-escaping和cdata-section-elements等...但我发现它们都不适合我的要求.
那么,有什么方法可以做到吗?如果输入xml节点有cdata,那么如果输入xml节点没有cdata那么它应该在输出中给它,那么它不应该在输出中给它.
我有一个节点叫做包含cdata和另一个节点在一些不包含cdata的差异位置..
<Address>
<Location>
<Code>912</Code>
<Value>10301</Value>
</Location>
<Name><![CDATA[E&S]]></Name>
<CompanyName><![CDATA[E&S]]></CompanyName>
<AddressLine3>dummy address</AddressLine3>
<City>dummy city</City>
<State>dummy state</State>
<PostalCode>dummy postal code</PostalCode>
<Country>dummy country</Country>
</Address>
<Nodes>
<Node>
<Type>CTU</Type>
<Text><![CDATA[dummy text & dummy Text.]]></Text>
</Node>
</Nodes>
Run Code Online (Sandbox Code Playgroud)
不固定的是,只有预定义的节点将包含它可以到达任何地方的cdata
我正在尝试在strings.xml中使用格式化的html .所以在strings.xml中我有以下内容:
<string name="application_start_message" formatted="false">
<![CDATA[ bla bla bla %1$ bla bla bla %1$.... ]]>
<string name="application_website_url">website.com</string>
Run Code Online (Sandbox Code Playgroud)
后来我在代码中做了:
String string = getString(
R.string.application_start_message,
getString(R.string.application_website_url)
);
Run Code Online (Sandbox Code Playgroud)
我得到的运行时异常是:
java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.artigile.checkmyphone/
com.artigile.checkmyphone.MainActivity}:
java.util.UnknownFormatConversionException: Conversion: <
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.util.UnknownFormatConversionException: Conversion: <
at java.util.Formatter$FormatToken.unknownFormatConversionException(Formatter.java:1399)
at java.util.Formatter$FormatToken.checkFlags(Formatter.java:1336)
at java.util.Formatter.transform(Formatter.java:1442)
at java.util.Formatter.doFormat(Formatter.java:1081)
at …Run Code Online (Sandbox Code Playgroud) 我正在尝试转换 XML:
<catalog>
<country><![CDATA[ WIN8 <b>X</b> Mac OS ]]></country>
</catalog>
Run Code Online (Sandbox Code Playgroud)
进入
<catalog>
<country><![CDATA[ WIN8 <b>X</b> Mac OS ]]></country>
</catalog>
Run Code Online (Sandbox Code Playgroud)
使用 XSL 转换。
我知道使用disable-output-escaping =“yes”或cdata-section-elements我可以将转义字符转换为未转义并放入CDATA中,但如果字符已经在CDATA中,则这不起作用。
有一个简单的方法吗?谢谢。
假设你有以下代码<head>
<head>
<!--
<script type="text/javascript">
//<![CDATA[
SOME JS
//]]>
</script>
-->
</head>
Run Code Online (Sandbox Code Playgroud)
它实际上有评论吗?
我正在使用简单的代码阅读RSS订阅源:
<?php
$homepage = file_get_contents('http://www.forbes.com/news/index.xml');
$movies = new SimpleXMLElement($homepage);
echo '<pre>';
print_r($movies);
?>
Run Code Online (Sandbox Code Playgroud)
和输出如下:SimpleXMLElement Object([@attributes] => Array([version] => 2.0)
[channel] => SimpleXMLElement Object
(
[title] => SimpleXMLElement Object
(
)
[link] => SimpleXMLElement Object
(
)
[description] => SimpleXMLElement Object
(
)
[language] => en-us
[copyright] => Copyright 2009 Forbes.com LLC
[item] => Array
(
[0] => SimpleXMLElement Object
(
[title] => SimpleXMLElement Object
(
)
[link] => SimpleXMLElement Object
(
)
[author] => SimpleXMLElement Object
(
)
[pubDate] => …Run Code Online (Sandbox Code Playgroud) cdata ×10
xml ×7
xslt ×4
html ×2
android ×1
android-xml ×1
c# ×1
formatting ×1
javascript ×1
jquery ×1
php ×1
url-encoding ×1
xhtml ×1
xslt-1.0 ×1