Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xsl如何使用.NET xslt获取下一个文本块_Xslt_Xpath - Fatal编程技术网

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()”加法来获得关于介绍发生在何处的结果。