C# | 一句话定位Xml/Html文档的节点

StairExpression是一个用于解析树形数据集合中节点位置的表达式库,支持条件检索。它可以将表达式字符串解析成查询参数,方便在XML等树形数据中快速定位目标节点。例如,可用于XML文档中元素和属性的定位、有条件检索等操作。该项目已开源,提供多种库和Demo项目。
摘要由CSDN通过智能技术生成

StairExpression

简介

StairExpression是一种用于描述树形数据集合中指定节点位置的表达式解析库。
此库可将表达式字符串语句解析出查询参数数据结构,使用此查询参数作为逐层检索树形数据集合的依据,实现对目标节点的快速定位。


语法

示例

查询语句:

第一层节点.第二层节点[条件属性1=比较值1,条件属性2="比较值2"].$属性节点

语句解析结果:

{
  "Expression": "第一层节点.第二层节点[条件属性1=比较值1,条件属性2=比较值2].$属性节点",
  "Nodes": [
    {
      "Index": 0,                                                           // 节点序号
      "IsAttribute": false,                                                 // 是否是属性节点
      "IsElement": true,                                                    // 属否是元素节点
      "NodeExpression": "第一层节点",                                        // 节点表达式
      "NodeName": "第一层节点",                                              // 节点名称
      "QueryConditions": null                                               // 查询条件
    },
    {
      "Index": 1,
      "IsAttribute": false,
      "IsElement": true,
      "NodeExpression": "第二层节点[条件属性1=比较值1,条件属性2=比较值2]",
      "NodeName": "第二层节点",
      "QueryConditions": [
        {
          "ConditionExpression": "条件属性1=比较值1",                         // 条件表达式
          "Key": "属性名1",                                                  // 属性名称
          "Value": "比较值1"                                                 // 比较值
        },
        {
          "ConditionExpression": "条件属性2=比较值2",
          "Key": "属性名2",
          "Value": "比较值2"
        }
      ]
    },
    {
      "Index": 2,
      "IsAttribute": true,
      "IsElement": false,
      "NodeExpression": "$属性节点",
      "NodeName": "属性节点",
      "QueryConditions": null
    }
  ],
  "NodeCount": 3
}

StairExpression.Xml

将StairExpression表达式应用于检索Xml的节点,支持在描述节点名称和筛选条件值时使用通配符。

示例

待操作的XML文档如下:

<?xml version="1.0" encoding="utf-8"?>
<school>
    <class name="101" type="理科">
        <teacher subject="数学">Lisa</teacher>
        <student age="16" sex="0">Barbara</student>
        <student age="17" sex="0">Sucrose</student>
        <student age="16" sex="1">Bennett</student>
    </class>
    <class name="102" type="文科">
        <teacher subject="语文">Jean</teacher>
        <student age="16" sex="0">Fischl</student>
        <student age="17" sex="1">Razor</student>
        <student age="16" sex="0">Klee</student>
    </class>
    <department name="后勤科">
        <staff>Noelle</staff>
    </department>
    <department name="保卫科">
        <staff>Kaeya</staff>
    </department>
</school>
简单的元素定位

获取所有教师的元素节点。

表达式: school.class.teacher

执行结果:

结果1:
<teacher subject="数学">Lisa</teacher>

文档节点路径:school.class.teacher
---------------------------------------------------
结果2:
<teacher subject="语文">Jean</teacher>

文档节点路径:school.class.teacher
---------------------------------------------------
简单的属性定位

获取教师专业课程的属性节点。

表达式: school.class.teacher.$subject

执行结果:

结果1:
subject="数学"

文档节点路径:school.class.teacher.subject
---------------------------------------------------
结果2:
subject="语文"

文档节点路径:school.class.teacher.subject
---------------------------------------------------
简单的条件检索

查找名为“Jean”的教师。

表达式: school.class.teacher[$text=Jean]

执行结果:

结果1:
<teacher subject="语文">Jean</teacher>

文档节点路径:school.class.teacher
---------------------------------------------------
多节的条件检索

查询102班内所有年龄为17的学生。
表达式: school.class[name=102].student[age=16]

执行结果:

结果1:
<student age="16" sex="0">Fischl</student>

文档节点路径:school.class.student
---------------------------------------------------
结果2:
<student age="16" sex="0">Klee</student>

文档节点路径:school.class.student
---------------------------------------------------
多条件检索

查询年龄为17岁的男性。
表达式: school.class.student[age=17,sex=1]

执行结果:

结果1:
<student age="17" sex="1">Razor</student>

文档节点路径:school.class.student
---------------------------------------------------

开源地址

GitHub - ApeFree.StairExpression
开源项目中包含语法核心库、Xml库、Html库、Demo项目。欢迎体验+Star。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿长大人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值