Xsl如何使用.NET xslt获取下一个文本块
我有一份文件,简化后如下:Xsl如何使用.NET xslt获取下一个文本块,xslt,xpath,Xslt,Xpath,我有一份文件,简化后如下: <?xml version="1.0"?> <document> <br/> <div class="Heading">Introduction</div> <div class="Text">Sed quis malesuada ligula. Aliquam eu felis nulla, ac tempus purus.</div> <br/
<?xml version="1.0"?>
<document>
<br/>
<div class="Heading">Introduction</div>
<div class="Text">Sed quis malesuada ligula. Aliquam eu felis nulla, ac tempus purus.</div>
<br/>
<div class="Heading">Background</div>
<div class="Text">Curabitur adipiscing tortor ipsum. In gravida congue tincidunt. Aliquam</div>
<br/>
<div class="Heading">Summary</div>
<div class="Text">Pellentesque consequat scelerisque urna, sit amet consequat quam lacinia ac.</div>
<br/>
</document>
介绍
塞德·奎斯·马莱苏达·利古拉。阿利奎姆,你的猫咪,ac坦普尔斯。
背景
掌跖斜颈。在妊娠期凝块中。等分
总结
佩伦特式的权杖,坐在拉齐尼亚广场上。
我想做的是获取介绍的文本:“Sed…puris”,所以我需要的是一个xpath表达式,类似这样:
<?xml version="1.0"?>
<document>
<br/>
<div class="Heading">Introduction</div>
<div class="Text">Sed quis malesuada ligula. Aliquam eu felis nulla, ac tempus purus.</div>
<br/>
<div class="Heading">Background</div>
<div class="Text">Curabitur adipiscing tortor ipsum. In gravida congue tincidunt. Aliquam</div>
<br/>
<div class="Heading">Summary</div>
<div class="Text">Pellentesque consequat scelerisque urna, sit amet consequat quam lacinia ac.</div>
<br/>
</document>
(//div[@class=“Text”])[0]/以下同级::节点(0)
显然这是垃圾;我要找的是一个表达式,意思是“选择具有一类文本的div节点的文本,其中前一个div节点具有一类标题,而前一个节点的文本是简介”
我也在考虑LINQ到Xml
什么XPath表达式可以做到这一点?我认为这可能做到:
//div
[@class='Text']
[preceding-sibling::div
[@class='Heading'
and text() = 'Introduction']
]
在测试中为我工作。让我解释一下。注释以#
开头
这里有一个C#console应用程序,可以让你准确地找到你想要的东西。请注意,我利用了Weblog的xpath,但对其进行了扩展,以获得所需的精确数据
控制台的输出为:
塞德·奎斯·马莱苏达·利古拉。阿利奎姆,你的猫咪,ac坦普尔斯
namespace StackOverflow
{
class Program
{
static void Main(string[] args)
{
string xPathStatement =
"document/div[@class='Text']" +
"[preceding-sibling::div" +
"[@class='Heading' and text() = 'Introduction']][1]/text()";
string xmldoc =
"<?xml version='1.0'?>" +
"<document>" +
"<br/>" +
"<div class='Heading'>Introduction</div>" +
"<div class='Text'>Sed quis malesuada ligula. Aliquam eu felis nulla, ac tempus purus.</div>" +
"<br/>" +
"<div class='Heading'>Background</div>" +
"<div class='Text'>Curabitur adipiscing tortor ipsum. In gravida congue tincidunt. Aliquam</div>" +
"<br/>" +
"<div class='Heading'>Summary</div>" +
"<div class='Text'>Pellentesque consequat scelerisque urna, sit amet consequat quam lacinia ac.</div>" +
"<br/>" +
"</document>";
XPathDocument doc = new XPathDocument(new StringReader(xmldoc));
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator iter = nav.Select(xPathStatement);
if (iter.MoveNext())
{
Console.WriteLine(iter.Current.OuterXml);
}
}
}
}
命名空间堆栈溢出
{
班级计划
{
静态void Main(字符串[]参数)
{
字符串XPath语句=
“文档/div[@class='Text']”+
“[前面的同级::div”+
“[@class='Heading'和text()='Introduction']][1]/text()”;
字符串xmldoc=
"" +
"" +
“
”+
“导言”+
“我是一只猫,我是一只猫,我是一只猫。”+
“
”+
“背景”+
“孕妇妊娠期颈静脉曲张畸形+
“
”+
“摘要”+
“佩伦特式的权杖,坐在拉齐尼亚广场上。”+
“
”+
"";
XPathDocument doc=新的XPathDocument(新的StringReader(xmldoc));
XPathNavigator nav=doc.CreateNavigator();
XPathNodeIterator iter=nav.Select(xPathStatement);
if(iter.MoveNext())
{
WriteLine(iter.Current.OuterXml);
}
}
}
}
您使用什么工具来测试这一点,并且前面的兄弟是xpath 2.0-ism吗?我使用的是Liquid XML Studio和C#.NET,出现了一个无效的令牌错误。@IanT8:我使用的是Visual Studio 2005(我相信它内部使用System.XML
stuff进行解析),它使用的是XPath 1.0。对我来说很好。啊,我的语法错误。知道这个表达式为什么选择所有“”节点吗:“//div[@class='Text'][前面的同级::div[@class='Heading'和Text()='Introduction']]”但是,如果我将Introduction div及其文本移动到文档的末尾,它会做正确的事情。最后,我使用了Joseph的“[1]/text()”加法来获得关于介绍发生在何处的结果。