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

StairExpression

文章目录

  • StairExpression
    • 简介
    • 语法
      • 示例
    • StairExpression.Xml
      • 示例
        • 简单的元素定位
        • 简单的属性定位
        • 简单的条件检索
        • 多节的条件检索
        • 多条件检索
    • 开源地址

简介

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文档如下:


<school>
    <class name="101" type="理科">
        <teacher subject="数学">Lisateacher>
        <student age="16" sex="0">Barbarastudent>
        <student age="17" sex="0">Sucrosestudent>
        <student age="16" sex="1">Bennettstudent>
    class>
    <class name="102" type="文科">
        <teacher subject="语文">Jeanteacher>
        <student age="16" sex="0">Fischlstudent>
        <student age="17" sex="1">Razorstudent>
        <student age="16" sex="0">Kleestudent>
    class>
    <department name="后勤科">
        <staff>Noellestaff>
    department>
    <department name="保卫科">
        <staff>Kaeyastaff>
    department>
school>

简单的元素定位

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

表达式: school.class.teacher

执行结果:

结果1:
Lisa

文档节点路径:school.class.teacher
---------------------------------------------------
结果2:
Jean

文档节点路径: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:
Jean

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

多节的条件检索

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

执行结果:

结果1:
Fischl

文档节点路径:school.class.student
---------------------------------------------------
结果2:
Klee

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

多条件检索

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

执行结果:

结果1:
Razor

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

开源地址

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

你可能感兴趣的:(c#,StairExpression,1024程序员节,c#,xml,html,C#)