XPath рдХрд╛ рдирд┐рд░реНрдорд╛рдг? рдПрд▓рдЧреЛрд░рд┐рджрдорд┐рдХ XPath? рдПрдХреНрд╕рдкреАрде рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ

рдирдорд╕реНрдХрд╛рд░ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВред рдпрд╣ рдкреЛрд╕реНрдЯ XPath рдЬреИрд╕реА рдкреНрд░рд╕рд┐рджреНрдз рдФрдкрдЪрд╛рд░рд┐рдХрддрд╛ рдХреЗ рдХреБрдЫ рдЧреИрд░-рдорд╛рдирдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧреАред рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдпрд╣ XML- рдпрд╛ HTML- рдпрд╛ рдХреБрдЫ рдЕрдиреНрдп * ML- рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ (рджреЛрдиреЛрдВ рд╕рд░рд▓ рдкрд╛рда рдФрд░ рдХреБрдЫ рдЖрднрд╛рд╕реА, рдЬреЛ рдХрд┐рд╕реА рднреА рдЬрдЯрд┐рд▓ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреА рд╢реАрд░реНрд╖ рдкрд░рдд рд╣реИрдВ) рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдлрд┐рд░ рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░рд╢реНрди рдХреЛ рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдмреЗрд╣рддрд░ рдкреНрд░рд╢реНрди рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЙрддреНрддрд░ рдХреЗ рдЕрдзрд┐рдХ рднрд╛рдЧ рдореЗрдВ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдЪрд╛рд░ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ: рдХреНрдпрд╛ рдПрдХреНрд╕рдкреАрде рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рднрд╛рд╡реЛрдВ рдХреЛ рдореБрдЦрд░ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рддрд╛рдХрд┐ рдпрд╣ рдПрдХреНрд╕рдкреАрде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рд╣реА рд╣реЛ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ, рдФрд░ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рдд рд╣реИ рдЬрд┐рд╕ рдкрд░ рдпрд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдФрд░ рджреВрд╕рд░рд╛ - рдЕрдЧрд░ рд╣рдо рд╕реАрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдирдП рддрддреНрд╡реЛрдВ рдХреЛ рд╕реАрдзреЗ XPath рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рддреЛ рдХреНрдпрд╛ XPath рдХреЛ рдПрдХ рд╕рд░рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдХрд▓реНрдкрдирд╛ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдФрд░ рдЙрд╕ рдкрд░ рд╢рд╛рдЦрд╛ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдореЗрдВ рдЪрдХреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдмрд╛рдХреА рд╣реИред рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдХрдо рд╕реЗ рдХрдо рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗред рдФрд░ рдЗрд╕ рдкрд░ рднреА рдЪрд░реНрдЪрд╛ рд╣реЛрдЧреАред

XPath рдХрд╛ рдирд┐рд░реНрдорд╛рдг


рддреЛ, рд╕рд╛рдзрд╛рд░рдг XPath рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЯреНрд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг (рдПрдХ рд╡рд░реНрдЧ рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╡рд┐рдзреЗрдп) рдкрд░ рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рд╢рд░реНрдд рд▓рдЧрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИред рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдиреЛрдбреНрд╕ рдпрд╛ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдореВрд▓реНрдп рдХреЗ рдХреБрдЫ рдкрд░рд┐рдорд┐рдд рд╕реЗрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВред рд╣рдо рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдХрдИ рдиреЛрдбреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред рдирд┐рдпрдорд┐рдд XPath рдиреЛрдбреНрд╕ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред рдПрдХ рдХрд╛рд▓реНрдкрдирд┐рдХ рдирд┐рд░реНрдорд╛рдг XPP рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рди рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рдиреЛрдбреНрд╕ рд▓реМрдЯрд╛рдПрдЧрд╛, рдмрд▓реНрдХрд┐ рдирдП рдиреЛрдб рднреА рдмрдирд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рд╡реЗ рдХреНрд╡реЗрд░реА рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд▓ рдЦрд╛рдПрдВред

рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ - XPath рдХреНрд╡реЗрд░реА рдХреЗ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рд╣рдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рдбреЗрдЯрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдЖрддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрдирдореЗрдВ рд╕реЗ рдХреМрди рд╕рд╛ рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ рдФрд░ рдХреЛрдИ рднреА рдирд┐рд░реНрдорд╛рдг рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ:

/OBJS/Var[@A=1 and @B=1 or @A=2 or @A=3]/X 

рдпрджрд┐ рд╣рдо рдЗрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ, рддреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреНрдпрд╛ рдЬрдбрд╝ рддрддреНрд╡ <OBJS> рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЗрд╕реЗ рдмрдирд╛рдПрдВред рдЗрд╕рдХреЗ рдмрд╛рдж рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреЗрдк рд╡рд╛рд░ рдЖрддрд╛ рд╣реИред рдореИрдВ рдЙрди рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдзреЗрдп рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЛ рдЬрдЯрд┐рд▓ рди рдХрд░реЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдлрд╝рд┐рд▓реНрдЯрд░ рдЙрди рддреАрди рдбреЗрдЯрд╛ рд╕реЗрдЯреЛрдВ рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рди рдкрд░ рдпрд╣ рд╕рддреНрдп рд╣реИ:

  1. <рд╡рд╛рд░ рдП = "1" рдмреА = "1" />
  2. <рд╡рд╛рд░ рдП = "2" />
  3. <рд╡рд╛рд░ рдП = "3" />

рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ <OBJS> рддрддреНрд╡ рдореЗрдВ рдРрд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдмрдЪреНрдЪреЗ <Var> рддрддреНрд╡ рд╣реИрдВред рдФрд░, рдЕрдВрдд рдореЗрдВ, рдЕрдЧрд▓рд╛ рдЪрд░рдг рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╢рд░реНрдд рдХреЗ рдПрдХреНрд╕ рд╣реИ - рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рд░ рддрддреНрд╡ рдореЗрдВ рдПрдХ рдмрдЪреНрдЪрд╛ рддрддреНрд╡ <рдПрдХреНрд╕> рд╣реИред

рддреЛ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирд┐рд░реНрдорд╛рдг XPath рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд▓рд┐рдП

 <OBJS> <Var A=тАЭ2тАЭ /> </OBJS> 

рд╣рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдорд┐рд▓рддрд╛ рд╣реИ:

 <OBJS> <Var A=тАЭ2тАЭ> <X/> </Var> <Var A=тАЭ1тАЭ B=тАЭ1тАЭ> <X/> </Var> <Var A=тАЭ3тАЭ> <X/> </Var> </OBJS> 

рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╣рдо рдПрдХреНрд╕рдкреАрдПрд▓ рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдкреАрдПрд▓ рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рднреА рдмрд┐рдирд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдПрд▓рдЧреЛрд░рд┐рджрдорд┐рдХ XPath


рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ XPath рдХреЛ рд╕рд┐рдЦрд╛рдпрд╛ рдХрд┐ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред рдЕрдм рдЙрдиреНрд╣реЗрдВ (рдереЛрдбрд╝рд╛) рд╕рд┐рдЦрд╛рдПрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдВред

рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд╛рд░реНрдХрд┐рдХ рдФрд░ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рддреЛ рдЖрдкрдХреЛ рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рднреА рддрддреНрд╡ рдПрдХ рд╕рд╣реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред

 A and B and C тАж and Z 

рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рд╕рд╢рд░реНрдд рд╕рдВрдЪрд╛рд▓рдХ рдпрджрд┐ (рдП) рддреЛ рдмреА рд╕реА , рдмреЗрд╢рдХ (рдФрд░ рдореИрдВ рдпрд╣рд╛рдВ рдХреБрдЫ рднреА рдирдпрд╛ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛), рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
 A and B or C 

рд▓реВрдк рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рдореИрдВ рдмрд╕ рдЗрд╕реЗ рдЙрд╕ рддрд░рд╣ рд╕реЗ рдкреЗрд╢ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рдПрдХ XPath рдлрд╝рдВрдХреНрд╢рди рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЛ рдкреЗрд╢ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рдХрд┐рд╕реА рднреА рдЪрдХреНрд░ рдХреЛ рд╕рдорд╛рдкреНрддрд┐ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпрд╣ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рд╣реИ (рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ)ред рдЪрд░ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ - рдЙрдиреНрд╣реЗрдВ рд╡рд░реНрддрдорд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рддрддреНрд╡реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЗрд╡рд▓ рдирд╛рдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред

рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдиреЗрд╕реНрдЯреЗрдб <рд╕реВрдЪреА> рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреА рджреЛ рд╕реВрдЪрд┐рдпрд╛рдВ рд╣реИрдВ:

  <a> <b> <list data="1"><list data="2"></list></list> </b> <c> <list data="3"><list data="4"></list></list></c> </a> 

рдпрд╣ <b> рддрддреНрд╡ рдФрд░ <c> рддрддреНрд╡ рд╕реЗ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рд╕рдорд╛рдкреНтАНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕реАрдзреЗ <a> рдореЗрдВ рд░рдЦреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рддреАрди XPath рдлрд╝рдВрдХреНрд╢рдВрд╕ рдкреЗрд╢ рдХрд┐рдП рдЬрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП:

 concat_list($#, $##): add_list(#/self::*) and add_list(##/self::*) add_list($#): count(list) = 0 and copy_list(#/self::*) or list[add_list(#/self::*)] or true() copy_list($#): count(#/list) = 0 or create(list[@data = #/list/@data]) and (list[copy_list(#/list)] or true()) 

рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓рд┐рдВрдЧ XPath рдЬреЛрдбрд╝реЗрдВ:

 concat_list(/a/b,/a/c) 

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐, рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ "рдХреЛрдб" рдХреЛ рд╕рдордЭрдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реВрдВрдЧрд╛, рд╡рд╣ рд╣реИ (XPATH) рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдирд┐рд░реНрдорд╛рдг рдореЛрдб рдореЗрдВ рдЕрдкрдиреЗ XPATH рддрд░реНрдХ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдФрд░ рдЕрдм рдпрд╣ рд╕рдм рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд▓реЗрдХрд┐рди рдЪрд░ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрднреА рднреА рдХрд╛рдлреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕реЗ рд╕рдордЭрддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдкреВрд░реНрдг-рдЪрд░реЛрдВ рд╡рд╛рд▓реЗ рдЪрд░ рдкреЗрд╢ рдХрд┐рдП, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, XPath рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИрдВ - рд╡реЗ "$" рдЪрд┐рдиреНрд╣ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдирдП рд╕реЗрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдорд╛рди рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реАред рдХреГрдкрдпрд╛, рдпрд╣рд╛рдБ рджреЛ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде deep_list рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ - рдкреНрд░рд╛рд░рдВрднрд┐рдХ рддрддреНрд╡ рдХрд╛ рд╕рдВрджрд░реНрдн рдЬрд┐рд╕рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪреА (рдКрдкрд░ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ), рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдЪрд░ рдЬрд┐рд╕рдореЗрдВ рд╕реВрдЪреА рдХреА рд▓рдВрдмрд╛рдИ рд╢рд╛рдорд┐рд▓ рд╣реИ:

 depth_list($#, &$OUT1): set($OUT1,0) and (#/list[set($OUT1,1) and depth_list(#/list,$OUT0) and set($OUT1,max($OUT0+1,$OUT1))]) or true() 

рдирд┐рд╖реНрдХрд░реНрд╖


рдкрд░рд┐рдгрд╛рдореА рдорд╛рдЗрдХреНрд░реЛ-рднрд╛рд╖рд╛ рдореЗрдВ, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ XPath рдбрд┐рдлреЗрдВрдбрд░ рдХрд╣рд╛ рдерд╛, рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рдЬреЛрдбрд╝реЗ рдФрд░ PGEN ++ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛, рдРрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛ рдПрдХреНрд╕рдПрдордПрд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдореЙрдбрд▓ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдпрджрд┐ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рдкрд╛рдард╛рддреНрдордХ рд╡рд┐рд╡рд░рдг (рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд▓рд┐рдП, рд░реВрд╕реА рдореЗрдВ) рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рд╡рд░рдг рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрд╛рд░реНрдп рд╡рд┐рд╡рд░рдг рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреНрд░рдо рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ (рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдСрдмреНрдЬреЗрдХреНрдЯ)ред рдпрд╣ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рдХреНрддрд╡реНрдп рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЕрднреА рддрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рд╣реИред рдорд╛рдиреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рддрддреНрд╡реЛрдВ рдХреЛ рдПрдХ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдо рдЙрди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рд╕рд╛рдзрд╛рд░рдг рдмрд╛рдЙрдВрдбрд┐рдВрдЧ рдпрд╛ рдЬреЗрдирд░реЗрдЯрд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ XPath рдбрд┐рдлреЗрдВрдбрд░ рдкрд░ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд░реВрдк рдореЗрдВ (рдпрд╣ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ)ред рдпреЗ рдирд┐рдпрдо рдПрдХ рд╕рдорд╛рдзрд╛рди рдпреЛрдЬрдирд╛ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЙрдбрд▓ рдХреЛ рдорд╛рдиреНрдп рдФрд░ рдкреВрд░рдХ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА, рдкреНрд░рд╛рдкреНрдд рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдирд┐рд░реНрдгрд╛рдпрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рддрд╛ рд╣реИред рд╡реЗрдХреНрдЯрд░ рдбреЗрдЯрд╛ рдХреЗ рдЧрдгрд┐рддреАрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рд╕рд░рд▓ рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдЗрд╕ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рдгрд╛рдо, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рдпрд╣ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╛рдмрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓рдЧрднрдЧ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ XPath рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдХреЗрд╡рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреЗрд╢ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

Source: https://habr.com/ru/post/hi464897/


All Articles