From 00ef5c9e1dc937f17bcce4ccc30d7e2239a35e97 Mon Sep 17 00:00:00 2001 From: Muhammad Adil Date: Tue, 29 Sep 2026 18:35:31 +0000 Subject: [PATCH] Add 6 html java tutorials Categories: configuring-environment, creating-managing-html-documents, css-html-form-editing, editing-html-documents Source: AI Search API Tutorials: - How to create HTML element in Java using Aspose.HTML - How to read CSS from HTML with Aspose.HTML in Java - Set custom user agent and screen dimensions in Aspose.HTML for Java - How to select elements by class in Java using querySelectorAll - How to count HTML elements in Java with XPath - How to change background color javascript using Java Auto-generated by Professionalize.Tutorials Agent --- .../java/configuring-environment/_index.md | 6 + .../_index.md | 191 ++++++++++++ .../_index.md | 8 +- .../_index.md | 215 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 251 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 276 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 6 + .../_index.md | 189 ++++++++++++ .../_index.md | 9 +- .../_index.md | 214 +++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 251 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 274 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 244 +++++++++++++++ .../java/configuring-environment/_index.md | 3 + .../_index.md | 192 ++++++++++++ .../_index.md | 8 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 251 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 266 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 191 ++++++++++++ .../_index.md | 18 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 253 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 1 + .../_index.md | 269 +++++++++++++++++ .../java/editing-html-documents/_index.md | 1 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 5 + .../_index.md | 193 ++++++++++++ .../og-image.png | Bin 0 -> 45697 bytes .../_index.md | 16 +- .../_index.md | 218 ++++++++++++++ .../og-image.png | Bin 0 -> 44360 bytes .../_index.md | 187 ++++++++++++ .../og-image.png | Bin 0 -> 45725 bytes .../_index.md | 255 ++++++++++++++++ .../og-image.png | Bin 0 -> 50591 bytes .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 279 +++++++++++++++++ .../og-image.png | Bin 0 -> 50229 bytes .../java/editing-html-documents/_index.md | 2 + .../_index.md | 247 +++++++++++++++ .../og-image.png | Bin 0 -> 47019 bytes .../java/configuring-environment/_index.md | 6 + .../_index.md | 194 ++++++++++++ .../_index.md | 9 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 253 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ .../java/editing-html-documents/_index.md | 3 +- .../_index.md | 248 ++++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 195 ++++++++++++ .../_index.md | 15 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 186 ++++++++++++ .../_index.md | 255 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 12 +- .../_index.md | 263 ++++++++++++++++ .../java/editing-html-documents/_index.md | 4 +- .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 3 + .../_index.md | 193 ++++++++++++ .../_index.md | 17 +- .../_index.md | 210 +++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 253 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 265 +++++++++++++++++ .../java/editing-html-documents/_index.md | 4 +- .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 191 ++++++++++++ .../_index.md | 12 +- .../_index.md | 217 ++++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 253 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ .../java/editing-html-documents/_index.md | 9 +- .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 190 ++++++++++++ .../_index.md | 9 +- .../_index.md | 208 +++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 252 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 275 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 245 +++++++++++++++ .../java/configuring-environment/_index.md | 4 + .../_index.md | 193 ++++++++++++ .../_index.md | 14 +- .../_index.md | 218 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 254 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 3 +- .../_index.md | 278 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 247 +++++++++++++++ .../java/configuring-environment/_index.md | 3 + .../_index.md | 191 ++++++++++++ .../_index.md | 9 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 257 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 247 +++++++++++++++ .../java/configuring-environment/_index.md | 3 + .../_index.md | 193 ++++++++++++ .../_index.md | 9 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 253 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 3 + .../_index.md | 189 ++++++++++++ .../_index.md | 14 +- .../_index.md | 214 +++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 249 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 265 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 244 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 193 ++++++++++++ .../_index.md | 8 +- .../_index.md | 214 +++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 251 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 +- .../_index.md | 273 +++++++++++++++++ .../java/editing-html-documents/_index.md | 4 +- .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 191 ++++++++++++ .../_index.md | 11 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 255 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ .../java/editing-html-documents/_index.md | 4 + .../_index.md | 247 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 193 ++++++++++++ .../_index.md | 9 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 257 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 4 +- .../_index.md | 281 ++++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 191 ++++++++++++ .../_index.md | 10 +- .../_index.md | 217 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 253 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 1 + .../_index.md | 279 +++++++++++++++++ .../java/editing-html-documents/_index.md | 3 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 195 ++++++++++++ .../_index.md | 8 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 257 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 277 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 1 + .../_index.md | 191 ++++++++++++ .../_index.md | 11 +- .../_index.md | 212 +++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 254 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 4 +- .../_index.md | 275 +++++++++++++++++ .../java/editing-html-documents/_index.md | 4 +- .../_index.md | 245 +++++++++++++++ .../java/configuring-environment/_index.md | 3 + .../_index.md | 191 ++++++++++++ .../_index.md | 12 +- .../_index.md | 210 +++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 253 ++++++++++++++++ .../thai/java/css-html-form-editing/_index.md | 5 + .../_index.md | 275 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 244 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 191 ++++++++++++ .../_index.md | 10 +- .../_index.md | 216 ++++++++++++++ .../_index.md | 183 ++++++++++++ .../_index.md | 252 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 5 +- .../_index.md | 277 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 246 +++++++++++++++ .../java/configuring-environment/_index.md | 2 + .../_index.md | 192 ++++++++++++ .../_index.md | 8 +- .../_index.md | 212 +++++++++++++ .../_index.md | 185 ++++++++++++ .../_index.md | 254 ++++++++++++++++ .../java/css-html-form-editing/_index.md | 2 + .../_index.md | 276 +++++++++++++++++ .../java/editing-html-documents/_index.md | 2 + .../_index.md | 246 +++++++++++++++ 236 files changed, 31755 insertions(+), 76 deletions(-) create mode 100644 html/arabic/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/arabic/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/arabic/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/arabic/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/arabic/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/arabic/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/chinese/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/chinese/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/chinese/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/chinese/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/chinese/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/chinese/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/czech/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/czech/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/czech/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/czech/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/czech/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/czech/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/dutch/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/dutch/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/dutch/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/dutch/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/dutch/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/dutch/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/english/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/english/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/og-image.png create mode 100644 html/english/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/english/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/og-image.png create mode 100644 html/english/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/english/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/og-image.png create mode 100644 html/english/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/english/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/og-image.png create mode 100644 html/english/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/english/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/og-image.png create mode 100644 html/english/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/english/java/editing-html-documents/how-to-change-background-color-javascript-using-java/og-image.png create mode 100644 html/french/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/french/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/french/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/french/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/french/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/french/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/german/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/german/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/german/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/german/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/german/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/german/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/greek/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/greek/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/greek/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/greek/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/greek/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/greek/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/hindi/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/hindi/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/hindi/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/hindi/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/hindi/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/hindi/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/hongkong/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/hongkong/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/hongkong/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/hongkong/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/hongkong/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/hongkong/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/hungarian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/hungarian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/hungarian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/hungarian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/hungarian/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/hungarian/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/indonesian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/indonesian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/indonesian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/indonesian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/indonesian/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/indonesian/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/italian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/italian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/italian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/italian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/italian/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/italian/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/japanese/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/japanese/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/japanese/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/japanese/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/japanese/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/japanese/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/korean/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/korean/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/korean/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/korean/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/korean/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/korean/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/polish/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/polish/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/polish/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/polish/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/polish/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/polish/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/portuguese/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/portuguese/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/portuguese/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/portuguese/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/portuguese/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/portuguese/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/russian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/russian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/russian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/russian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/russian/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/russian/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/spanish/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/spanish/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/spanish/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/spanish/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/spanish/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/spanish/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/swedish/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/swedish/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/swedish/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/swedish/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/swedish/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/swedish/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/thai/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/thai/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/thai/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/thai/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/thai/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/thai/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/turkish/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/turkish/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/turkish/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/turkish/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/turkish/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/turkish/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md create mode 100644 html/vietnamese/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md create mode 100644 html/vietnamese/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md create mode 100644 html/vietnamese/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md create mode 100644 html/vietnamese/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md create mode 100644 html/vietnamese/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md create mode 100644 html/vietnamese/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md diff --git a/html/arabic/java/configuring-environment/_index.md b/html/arabic/java/configuring-environment/_index.md index 3e3182dea6..c1411f1187 100644 --- a/html/arabic/java/configuring-environment/_index.md +++ b/html/arabic/java/configuring-environment/_index.md @@ -55,6 +55,9 @@ weight: 29 [تعلم كيفية إعداد خدمة شبكة في Aspose.HTML for Java.](./setup-network-service/) +### [ضبط وكيل المستخدم المخصص وأبعاد الشاشة في Aspose.HTML for Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +تعلم كيفية تعيين وكيل المستخدم المخصص وأبعاد الشاشة في Aspose.HTML for Java لتحسين عمليات التحويل. + ## كيفية تكوين خدمة وقت التشغيل HTML الديناميكي غالبًا ما يحتوي على سكريبتات يجب تشغيلها قبل العرض. خدمة وقت التشغيل تتحكم في تنفيذ السكريبتات، مما يتيح لك تحديد استهلاك المعالج، ضبط مهلات الوقت، ومنع الحلقات اللانهائية—وهو أمر حاسم لتحويلات مستقرة وعالية الأداء. @@ -110,6 +113,9 @@ HTML الديناميكي غالبًا ما يحتوي على سكريبتات ### [إعداد خدمة الشبكة في Aspose.HTML for Java](./setup-network-service/) تعلم كيفية إعداد خدمة شبكة في Aspose.HTML for Java، إدارة موارد الشبكة، وتحويل HTML إلى PNG مع معالجة الأخطاء المخصصة. +### [ضبط وكيل المستخدم المخصص وأبعاد الشاشة في Aspose.HTML for Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +تعلم كيفية تعيين وكيل المستخدم المخصص وأبعاد الشاشة في Aspose.HTML for Java لتحسين عمليات التحويل. + ### [تكوين خدمة وقت التشغيل في Aspose.HTML for Java](./configure-runtime-service/) تعلم كيفية تكوين خدمة وقت التشغيل في Aspose.HTML for Java لتحسين تنفيذ السكريبتات، منع الحلقات اللانهائية، وتحسين أداء التطبيق. diff --git a/html/arabic/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/arabic/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..516d13e9f8 --- /dev/null +++ b/html/arabic/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,191 @@ +--- +category: general +date: 2026-09-29 +description: قم بتعيين وكيل مستخدم مخصص في Aspose.HTML للغة Java وتعلم كيفية ضبط حجم + الشاشة الافتراضية للحصول على عرض HTML دقيق. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: ar +lastmod: 2026-09-29 +og_description: قم بتعيين وكيل مستخدم مخصص في Aspose.HTML للـ Java وتعرّف على كيفية + ضبط حجم الشاشة الافتراضية للحصول على عرض HTML دقيق. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: تعيين وكيل مستخدم مخصص وأبعاد الشاشة في Aspose.HTML للغة Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: تعيين وكيل مستخدم مخصص وأبعاد الشاشة في Aspose.HTML لجافا +url: /ar/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# تعيين وكيل مستخدم مخصص وأبعاد الشاشة في Aspose.HTML للـ Java + +إذا كنت بحاجة إلى **تعيين وكيل مستخدم مخصص** أثناء عرض HTML باستخدام Aspose.HTML للـ Java، يوضح لك هذا الدليل بالضبط كيفية القيام بذلك. من خلال تكوين sandbox ستحصل أيضًا على القدرة على **تعيين حجم الشاشة الافتراضي**، مما يضمن أن التخطيط يتطابق مع مساحة عرض المتصفح الحقيقية. + +ستنتهي من هذا البرنامج التعليمي ببرنامج كامل قابل للتنفيذ يقوم **بتحديد وكيل المستخدم**، **بتعيين عرض الشاشة**، و**بتعيين ارتفاع الشاشة**. لا تحتاج إلى أدوات خارجية—فقط Aspose.HTML للـ Java وبيئة تشغيل Java 8+. + +## ما ستتعلمه + +* كيفية إنشاء `SandboxConfiguration` لعزل عملية العرض. +* كيفية **تعيين وكيل مستخدم مخصص** ولماذا يهم ذلك للصفحات المتجاوبة. +* كيفية **تعيين حجم الشاشة الافتراضي** (عرض الشاشة وارتفاعها) للحصول على تخطيط دقيق. +* كيفية تحميل ملف HTML داخل الـ sandbox وحفظ النتيجة المعالجة. +* المشكلات الشائعة ونصائح أفضل الممارسات للعرض داخل sandbox. + +> **المتطلبات المسبقة** – تحتاج إلى ترخيص صالح لـ Aspose.HTML للـ Java، Java 8 أو أحدث، وبيئة تطوير متكاملة (IntelliJ IDEA، Eclipse، أو VS Code). يستخدم المثال ملف `input.html` محلي، لكن أي URL قابل للوصول يعمل. + +![مخطط تدفق Sandbox](sandbox-flow.png "مثال تعيين وكيل مستخدم مخصص في Java") + +## الخطوة 1: إنشاء تكوين sandbox (الأساس) + +العزل sandbox يعزل بيئة العرض عن JVM المضيف، وهو أمر أساسي عندما تريد **تعيين وكيل مستخدم مخصص** أو تغيير حجم مساحة العرض. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*لماذا هذه الخطوة؟* +`SandboxConfiguration` يحتوي على جميع خيارات العرض، بما في ذلك **أبعاد الشاشة** وسلاسل **user‑agent**. من خلال تكوينه قبل تحميل المستند، تضمن أن محرك HTML يحترم تلك الإعدادات من الطلب الأول. + +## الخطوة 2: تعيين أبعاد الشاشة لمحاكاة جهاز حقيقي + +غالبًا ما تقرأ المواقع المتجاوبة `window.innerWidth` و `window.innerHeight`. لجعل المحرك يعتقد أنه يعمل على شاشة 1024 × 768، عليك **تعيين حجم الشاشة الافتراضي**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*لماذا هذا مهم* – إذا تجاهلت **تعيين أبعاد الشاشة**، قد يستخدم العارض مساحة عرض صغيرة افتراضيًا، مما يؤدي إلى اختيار استعلامات وسائط CSS لتطبيق تخطيط الهاتف المحمول. من خلال **تعيين عرض الشاشة** و**تعيين ارتفاع الشاشة** صراحةً، تتحكم في القواعد التي تُطبق. + +## الخطوة 3: تحديد سلسلة وكيل مستخدم مخصص + +بعض صفحات الويب تقدم محتوى مختلف بناءً على رأس الـ user‑agent. لت **تحديد وكيل المستخدم** ببساطة قم بتعيينه في تكوين الـ sandbox: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*لماذا استخدام وكيل مستخدم مخصص؟* +يمكن لسلسلة مخصصة تجاوز اكتشاف الروبوتات، تفعيل ميزات مخصصة لأجهزة سطح المكتب، أو اختبار كيفية تصرف الموقع لإصدار متصفح معين. يقوم محرك Aspose بتمرير هذه القيمة مع كل طلب HTTP يتم أثناء تحميل الموارد الخارجية (CSS، الصور، السكريبتات). + +## الخطوة 4: تحميل مستند HTML داخل الـ sandbox + +الآن بعد أن تم تكوين الـ sandbox بالكامل، قم بتحميل ملف HTML. المُنشئ الذي يأخذ مسار ملف و`SandboxConfiguration` يطبق تلقائيًا جميع الإعدادات التي عرّفناها. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +إذا كنت بحاجة للتحميل من URL بعيد، استبدل مسار الملف بسلسلة URL—ستظل Aspose.HTML تحترم **وكيل المستخدم المخصص** و**أبعاد الشاشة**. + +## الخطوة 5: حفظ الناتج المعالج + +بعد انتهاء تحميل المستند، يمكنك حفظه بأي تنسيق مدعوم. هنا نكتب ملف HTML داخل sandbox يعكس أي تغييرات في DOM ناتجة عن الإعدادات المخصصة. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +سيحتوي الملف المحفوظ على نفس العلامات، لكن أي سكريبتات استعلمت عن `navigator.userAgent` أو فحصت `window.innerWidth` سترى الآن القيم التي قدمتها. + +## مثال كامل قابل للتنفيذ + +جمع جميع الخطوات معًا يمنحك برنامجًا مستقلًا يمكنك نسخه، لصقه، وتشغيله. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### النتيجة المتوقعة + +تشغيل البرنامج ينشئ `sandboxed_output.html`. إذا فتحته في متصفح وفحصت `navigator.userAgent` عبر وحدة التحكم، سترى **AsposeHTML/1.0**. بالمثل، سيظهر `window.innerWidth` القيمة **1024**، مما يؤكد أن **تعيين أبعاد الشاشة** عمل كما هو مقصود. + +## أسئلة شائعة ومعالجة الحالات الطرفية + +| السؤال | الإجابة | +|----------|--------| +| **ماذا لو قامت الصفحة بتحميل موارد إضافية من نطاق مختلف؟** | يقوم الـ sandbox بتمرير **وكيل المستخدم المخصص** مع كل طلب، لكن سياسات المصدر المتقاطع لا تزال سارية. استخدم `sandboxConfig.setAllowCrossDomain(true)` إذا كنت بحاجة لتخفيف تلك القيود. | +| **هل يمكنني تغيير حجم الشاشة بعد تحميل المستند؟** | لا. تُقرأ أبعاد الشاشة أثناء تمريرة التخطيط الأولية. لتصوير بحجم مختلف، أنشئ `SandboxConfiguration` جديدًا وأعد تحميل المستند. | +| **هل أحتاج إلى استدعاء `document.close()`؟** | `HTMLDocument` يطبق `AutoCloseable`. استخدام كتلة try‑with‑resources يضمن التنظيف المناسب، لكن استدعاء `close()` صريح اختياري في السكريبتات البسيطة. | +| **كيف يختلف هذا عن تعيين وكيل المستخدم في عميل HTTP؟** | تعيين وكيل المستخدم على الـ sandbox يؤثر على **جميع** طلبات الموارد التي يقوم بها محرك HTML، وليس فقط طلب HTML الأولي. هذا يحاكي المتصفح الحقيقي بشكل أقرب. | +| **هل الـ sandbox آمن للـ HTML غير الموثوق به؟** | نعم. الـ sandbox يعزل الوصول إلى نظام الملفات ويحد من المكالمات الشبكية وفقًا للتكوين، مما يقلل من خطر السكريبتات الخبيثة التي تؤثر على JVM المضيف. | + +## نصائح احترافية + +* **إعادة استخدام التكوينات** – إذا قمت بعرض العديد من الصفحات بنفس مساحة العرض، أنشئ `SandboxConfiguration` واحدًا وأعد استخدامه لتجنب عبء إنشاء الكائنات. +* **التصحيح باستخدام السجلات** – فعّل سجلات Aspose.HTML (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) لتعرف أي موارد تم جلبها باستخدام وكيل المستخدم المخصص. +* **الدمج مع استعلامات وسائط CSS** – من خلال تعديل **تعيين عرض الشاشة** يمكنك اختبار سلوك التصميم المتجاوب على الأجهزة اللوحية، الهواتف، أو شاشات الحواسيب الكبيرة دون فتح متصفح حقيقي. + +## الخلاصة + +أنت الآن تعرف كيف **تعيين وكيل مستخدم مخصص** و**تعيين أبعاد الشاشة** عند عرض HTML باستخدام Aspose.HTML للـ Java. من خلال تكوين sandbox، تعزل البيئة، تتحكم في مساحة العرض، وتضمن أن الموارد الخارجية ترى رؤوس الطلبات التي تحددها بالضبط. هذه التقنية أساسية لاختبار التخطيطات المتجاوبة، تجاوز حواجز الروبوتات، أو إعادة إنتاج ميزات سطح المكتب فقط في خطوط الأنابيب الآلية. + +بعد ذلك، قد تستكشف **كيفية تعيين ملفات تعريف الارتباط المخصصة** أو **التقاط لقطات شاشة مُصدرة** باستخدام واجهة برمجة تطبيقات العرض في Aspose.HTML—كلا المفهومين يبنيان على نمط تكوين sandbox نفسه الذي تعلمته الآن. + +برمجة سعيدة! + +## ماذا يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مصدر يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [العرض بدقة DPI عالية في Java – التقاط لقطات شاشة للويب مع وكيل مستخدم مخصص](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [كيفية تحميل HTML، تعيين DPI للجهاز وقراءة لون الخلفية](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [إنشاء ملف HTML في Java وإعداد خدمة الشبكة (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/java/creating-managing-html-documents/_index.md b/html/arabic/java/creating-managing-html-documents/_index.md index 1220d69ba8..4b2eb13737 100644 --- a/html/arabic/java/creating-managing-html-documents/_index.md +++ b/html/arabic/java/creating-managing-html-documents/_index.md @@ -62,6 +62,8 @@ url: /ar/java/creating-managing-html-documents/ اكتشف كيفية تحميل مستندات HTML بسهولة من عنوان URL في Java باستخدام Aspose.HTML. يتضمن البرنامج التعليمي خطوة بخطوة. ### [تحميل مستند HTML في Java – دليل كامل مع XPath و CSS](./load-html-document-java-complete-guide-with-xpath-css/) تعلم كيفية تحميل ومعالجة مستندات HTML في Java باستخدام Aspose.HTML مع دعم XPath و CSS في دليل شامل خطوة بخطوة. +### [عد عناصر HTML في Java باستخدام XPath](./how-to-count-html-elements-in-java-with-xpath/) +تعلم كيفية عد عناصر HTML في مستندات Java باستخدام XPath من خلال دليل خطوة بخطوة. ### [إنشاء مستندات HTML جديدة باستخدام Aspose.HTML لـ Java](./generate-new-html-documents/) تعرف على كيفية إنشاء مستندات HTML جديدة باستخدام Aspose.HTML for Java من خلال هذا الدليل السهل خطوة بخطوة. ابدأ في إنشاء محتوى HTML ديناميكي. ### [التعامل مع أحداث تحميل المستندات في Aspose.HTML لـ Java](./handle-document-load-events/) @@ -80,6 +82,10 @@ url: /ar/java/creating-managing-html-documents/ تعلم كيفية حساب عدد أحرف HTML في مستندات Java باستخدام Aspose.HTML من خلال دليل شامل خطوة بخطوة. ### [استخراج النص من HTML في Java – دليل برمجة كامل](./extract-text-from-html-in-java-complete-programming-guide/) تعلم كيفية استخراج النص من مستندات HTML باستخدام Aspose.HTML لـ Java من خلال دليل شامل خطوة بخطوة. +### [كيفية إنشاء عنصر HTML في Java باستخدام Aspose.HTML](./how-to-create-html-element-in-java-using-aspose-html/) +تعلم كيفية إنشاء عنصر HTML في Java باستخدام مكتبة Aspose.HTML خطوة بخطوة. +### [كيفية اختيار العناصر حسب الفئة في Java باستخدام querySelectorAll](./how-to-select-elements-by-class-in-java-using-queryselectora/) +تعلم كيفية اختيار عناصر HTML حسب الفئة في Java باستخدام querySelectorAll خطوة بخطوة. {{< /blocks/products/pf/tutorial-page-section >}} @@ -114,4 +120,4 @@ url: /ar/java/creating-managing-html-documents/ {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/arabic/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..f21bf3cb74 --- /dev/null +++ b/html/arabic/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,215 @@ +--- +category: general +date: 2026-09-29 +description: تعلم كيفية عد عناصر HTML في جافا باستخدام Aspose.HTML وXPath. يوضح هذا + الدليل كيفية تحميل مستند HTML، واختيار العقد باستخدام XPath، والحصول على قائمة العقد. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: ar +lastmod: 2026-09-29 +og_description: كيفية عد عناصر HTML في جافا باستخدام Aspose.HTML. اتبع هذا الدرس الكامل + لتحميل مستند HTML، اختيار العقد باستخدام XPath، تقييم XPath في جافا، والحصول على + قائمة بالعقد. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: كيفية عد عناصر HTML في Java – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: كيفية عد عناصر HTML في جافا باستخدام XPath +url: /ar/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية عد عناصر HTML في جافا باستخدام XPath + +إذا كنت بحاجة إلى **how to count HTML elements** في صفحة ويب من تطبيق جافا، فإن هذا الدليل يقدم لك حلاً كاملاً وجاهزًا للتنفيذ. بحلول نهاية الجملتين الأوليين ستعرف بالضبط كيفية تحميل مستند HTML، واختيار العقد باستخدام XPath، واسترجاع قائمة العقد التي يمكنك عدّها. + +سنستخدم مكتبة Aspose.HTML for Java لأنها توفر واجهة برمجة تطبيقات متوافقة مع DOM ومحرك XPath قوي. يغطي الدرس كل ما تحتاجه — الاستيرادات، الكود، الشروحات، والناتج المتوقع — حتى يمكنك نسخ المثال إلى مشروعك ورؤية النتائج فورًا. على طول الطريق سنتطرق أيضًا إلى **select nodes with XPath**، **get node list Java**، **load HTML document Java**، و **evaluate XPath in Java**. + +## ما ستحققه + +* تحميل ملف HTML من نظام الملفات. +* إنشاء تعبير XPath يستهدف عناصر محددة. +* تقييم تعبير XPath ضد المستند. +* استرجاع `NodeList` وعدّ عدد العناصر المطابقة الموجودة. + +لا تتطلب خدمات خارجية أو تكوين معقد؛ فقط ملف JAR الخاص بـ Aspose.HTML على مسار الفئة الخاص بك. + +--- + +## كيفية عد عناصر HTML باستخدام XPath في جافا + +هذا القسم خطوة بخطوة يوضح الكود الدقيق الذي تحتاجه. كل قسم فرعي يتCorrespond إلى جزء منطقي من العملية، مما يجعل من السهل التكيّف أو التوسيع. + +### الخطوة 1: تحميل مستند HTML في جافا + +أولاً، أحضر ملف HTML إلى الذاكرة. تقوم فئة `HTMLDocument` بتحليل الملف وبناء شجرة DOM يمكن لـ XPath الاستعلام منها. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**لماذا هذا مهم:** +تحميل المستند ينشئ تمثيل DOM، وهو مطلوب لأي تقييم XPath. إذا كان مسار الملف غير صحيح، فإن Aspose.HTML يطرح استثناء `FileNotFoundException`، لذا تحقق مرة أخرى من موقع `input.html`. + +### الخطوة 2: إنشاء وتقييم تعبير XPath + +الآن نبني تعبير XPath يختار العناصر التي نريد عدّها. في هذا المثال نعد جميع وسوم `` التي تكون خاصية `alt` لها تساوي `"logo"`. + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**لماذا هذا مهم:** +التعبير `//img[@alt='logo']` هو طريقة مختصرة لـ **select nodes with XPath**. استدعاء `evaluate` **evaluate XPath in Java** ويعيد نتيجة عامة `XPathResult`. التحويل إلى `NodeList` يمنحنا وصولًا مباشرًا إلى مجموعة العقد المطابقة. + +### الخطوة 3: استرجاع وعدّ قائمة العقد + +أخيرًا، نعد عدد العقد التي تم إرجاعها. توفر واجهة `NodeList` الدالة `getLength()` لهذا الغرض. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**لماذا هذا مهم:** +`getLength()` هي أبسط طريقة لـ **get node list Java** والحصول على عدد. إذا لم يطابق XPath أي عناصر، فإن الطول سيكون `0`، ويمكن لتطبيقك التعامل مع ذلك بسلاسة. + +### مثال كامل قابل للتنفيذ + +فيما يلي البرنامج الكامل، بما في ذلك جميع الاستيرادات وطريقة `main` الحدّية. انسخه في ملف اسمه `CountHtmlElements.java`، أضف ملف JAR الخاص بـ Aspose.HTML إلى مشروعك، وشغّله. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**الناتج المتوقع** + +إذا كان `input.html` يحتوي على ثلاثة وسوم `logo`، سيطبع البرنامج: + +``` +Found 3 logo images. +``` + +إذا لم توجد مثل هذه الصور، سيطبع: + +``` +Found 0 logo images. +``` + +--- + +## الاختلافات الشائعة وحالات الحافة + +| الحالة | ما الذي يجب تغييره | السبب | +|-----------|----------------|--------| +| عد عنصر مختلف (مثال: `
` مع الفئة `header`) | غيّر XPath إلى `//div[@class='header']` | تسمح لك صيغة XPath باستهداف أي وسم/خاصية. | +| عد جميع العناصر بغض النظر عن الخاصية | استخدم `//*` كتعبير XPath | `//*` يختار كل عقدة عنصر في المستند. | +| المستندات الكبيرة التي تسبب ضغطًا على الذاكرة | استخدم محلل تدفق أو قيم XPath على جزء | توفر Aspose.HTML `HTMLDocumentFragment` للتحليل الجزئي. | +| الحاجة إلى العقد الفعلية، وليس مجرد العدد | كرّر عبر `nodes.item(i)` | يمكنك معالجة كل عقدة بعد العد. | + +**نصيحة احترافية:** دائمًا تحقق من صحة سلسلة XPath قبل تمريرها إلى `createXPathExpression`. يُطلق تعبير غير صالح استثناء `XPathException`، والذي يمكنك التقاطه لتوفير رسالة خطأ ودية. + +--- + +## قائمة التحقق من استكشاف الأخطاء وإصلاحها + +1. **المكتبة غير موجودة** – تأكد من أن ملف JAR الخاص بـ Aspose.HTML for Java موجود في مسار الفئة (`-cp` أو تبعيات IDE الخاصة بك). +2. **الملف غير موجود** – تحقق من أن `input.html` موجود بالنسبة إلى دليل العمل أو استخدم مسارًا مطلقًا. +3. **نتائج صفرية** – تحقق مرة أخرى من قيم الخصائص وحساسية الحالة (`alt='logo'` مقابل `alt='Logo'`). XPath حساسة لحالة الأحرف. +4. **مخاوف الأداء** – أعد استخدام نسخة واحدة من `HTMLDocument` إذا كنت بحاجة إلى تشغيل العديد من استعلامات XPath على نفس الملف. + +--- + +## الخلاصة + +الآن تعرف **how to count HTML elements** في جافا باستخدام Aspose.HTML وXPath. من خلال تحميل مستند HTML، إنشاء تعبير XPath، **evaluate XPath in Java**، واسترجاع **node list**، يمكنك بسرعة تحديد عدد العناصر المطابقة. هذه التقنية تعمل مع أي وسم أو خاصية، مما يجعلها أداة متعددة الاستخدامات لتجريف الويب، الاختبار الآلي، أو تحليل المحتوى. + +الخطوات التالية التي قد تستكشفها تشمل: + +* استخدام **select nodes with XPath** لاستخراج قيم الخصائص (مثال: `src` للصورة). +* دمج استعلامات XPath متعددة لإنشاء تقرير إحصائي للعناصر. +* دمج هذه المنطق في خدمة جافا أكبر تعالج ملفات HTML بشكل جماعي. + +لا تتردد في تجربة تعبيرات XPath مختلفة وهياكل المستند—عد عناصر HTML هو مجرد البداية! + +## ماذا يجب أن تتعلم بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة كود كاملة تعمل مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [كيف تحلل HTML في جافا – تحميل، استعلام وعد العناصر](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [كيف تستعلم عن HTML في جافا – اختيار العناصر، تصفية حسب الخاصية، والحصول على النص](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [تحميل مستند HTML في جافا – دليل كامل مع XPath وCSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/arabic/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..bb6273ae85 --- /dev/null +++ b/html/arabic/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,185 @@ +--- +category: general +date: 2026-09-29 +description: تعلم كيفية إنشاء عنصر HTML في جافا، وإضافة فقرة، وتعيين نصها، وإلحاقها + بجسم الصفحة باستخدام Aspose.HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: ar +lastmod: 2026-09-29 +og_description: إنشاء عنصر HTML في جافا عن طريق إضافة فقرة، وتعيين نصها، وإلحاقها + بجسم الصفحة باستخدام Aspose.HTML. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: إنشاء عنصر HTML في Java – دليل Aspose.HTML خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: كيفية إنشاء عنصر HTML في جافا باستخدام Aspose.HTML +url: /ar/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية إنشاء عنصر HTML في جافا باستخدام Aspose.HTML + +إذا كنت بحاجة إلى **إنشاء عنصر HTML** في تطبيق جافا، يوضح لك هذا الدليل حلًا كاملاً وقابلًا للتنفيذ. سترى كيف **تضيف فقرة**، وتحدد نصها، و**تُرفق العنصر بجسم** ملف HTML موجود باستخدام Aspose.HTML. + +يغطي البرنامج التعليمي كل شيء من تحميل المستند إلى حفظ الملف المعدل، بحيث يمكنك نسخ الشيفرة إلى مشروعك الخاص دون الحاجة إلى بحث إضافي. + +## المتطلبات المسبقة + +قبل أن تبدأ، تأكد من وجود ما يلي: + +* جافا 17 أو أحدث مثبتة. +* Aspose.HTML for Java 23.10 (أو أحدث نسخة) مضافة إلى مسار الفئات (classpath) في مشروعك. +* ملف `input.html` بسيط في مسار معروف. يمكن أن يكون الملف فارغًا (``) أو يحتوي على علامات موجودة. + +## الخطوة 1: تحميل مستند HTML الموجود + +تحميل الملف المصدر يمنحك شجرة DOM قابلة للتعديل. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +يقوم مُنشئ `HTMLDocument` بتحليل الملف وإنشاء DOM حي. إذا تعذر قراءة الملف، يرمي Aspose.HTML استثناءً من نوع `IOException`؛ يمكنك ترك الاستثناء ينتقل أو معالجته باستخدام كتلة try‑catch. + +## الخطوة 2: إنشاء عنصر `

` جديد وإضافة نص إلى HTML + +إنشاء عنصر جديد مشابه لاستخدام `document.createElement` في المتصفح. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` ينشئ تلقائيًا عقدة نصية ويربطها بالعنصر، وهي الطريقة الموصى بها **لإضافة نص إلى HTML**. كما أن هذه الطريقة تهرب الأحرف التي قد تكسر العلامات. + +## الخطوة 3: إرفاق العنصر بالجسم (body) + +الآن بعد أن أصبحت الفقرة جاهزة، تحتاج إلى وضعها داخل `` للمستند. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` تُعيد عقدة ``، و`appendChild` تُدرج العنصر `

` الجديد كآخر طفل. إذا لم يحتوي المستند على عنصر `` (وهو أمر نادر في ملف HTML مُشكل جيدًا)، فإن Aspose.HTML ينشئه تلقائيًا. + +## الخطوة 4: حفظ المستند المعدل + +أخيرًا، اكتب الـ DOM المحدث إلى القرص. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` تُسلسل الـ DOM، مع الحفاظ على العلامات الموجودة وإضافة الفقرة الجديدة. سيحتوي الملف الناتج `output.html` على: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## الشيفرة الكاملة (مثال java html) + +جمع جميع الخطوات معًا يمنحك برنامجًا مستقلًا يمكنك تشغيله فورًا. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### ما تقوم به الشيفرة + +| الخطوة | الإجراء | لماذا يهم | +|--------|----------|-----------| +| تحميل المستند | `new HTMLDocument(...)` | يحلل ملف HTML المصدر إلى DOM يمكنك تعديلها. | +| إنشاء العنصر | `doc.createElement("p")` | يُحاكي واجهة برمجة المتصفح، مما يضمن توافق العنصر مع معايير HTML. | +| تعيين النص | `setTextContent(...)` | يضمن الهروب الصحيح للأحرف ويتجنب إنشاء عقد نصية يدويًا. | +| إرفاقه بالجسم | `doc.getBody().appendChild(...)` | يضع العنصر الجديد في الموضع الذي سيعرضه المتصفح. | +| حفظ الملف | `doc.save(...)` | يحفظ التغييرات، مُنتجًا ملف HTML صالحًا جاهزًا للاستخدام لاحقًا. | + +## الاختلافات الشائعة وحالات الحافة + +* **إضافة عناصر متعددة** – كرّر الخطوتين 2‑3 لكل عقدة جديدة قبل استدعاء `save`. +* **الإدراج قبل عقدة محددة** – استخدم `insertBefore(newNode, referenceNode)` بدلًا من `appendChild`. +* **العمل مع المقاطع (fragments)** – `doc.createDocumentFragment()` يتيح لك بناء مجموعة من العقد وإرفاقها في عملية واحدة، ما يحسن الأداء في التحديثات الكبيرة. +* **معالجة الأحرف UTF‑8** – Aspose.HTML يكتب UTF‑8 تلقائيًا؛ فقط تأكد من أن ملف المصدر مُرمَّز بنفس الطريقة. + +## نصائح عملية + +* **معالجة المسارات** – استخدم `java.nio.file.Paths` لإنشاء مسارات ملفات مستقلة عن النظام. +* **أمان الاستثناءات** – غلف الكتلة بالكامل بعبارة try‑with‑resources إذا كنت بحاجة لإغلاق تدفقات إضافية. +* **الأداء** – للملفات HTML الضخمة جدًا، فكر في تحميل المستند باستخدام `HTMLDocument(String, LoadOptions)` حيث يمكنك تعطيل الموارد الخارجية لتسريع التحليل. + +## التحقق من النتيجة + +بعد تشغيل البرنامج، افتح `output.html` في أي متصفح. يجب أن ترى الفقرة “Added by Aspose.HTML” معروضة حيث ينتهي جسم الصفحة الأصلي. افحص مصدر الصفحة لتتأكد من وجود عنصر `

` داخل ``. + +## الخلاصة + +أصبح بإمكانك الآن **إنشاء عنصر HTML** في جافا، **إضافة فقرة**، **إضافة نص إلى HTML**، و**إرفاق العنصر بالجسم** باستخدام Aspose.HTML. يُظهر مثال **java html** الكامل سير عمل نظيفًا وجاهزًا للإنتاج يمكنك توسيعه لتعديل أي جزء من مستند HTML. + +بعد ذلك، استكشف المواضيع ذات الصلة مثل **تعديل الخصائص**، **إزالة العقد**، أو **العمل مع أنماط CSS** لبناء خطوط معالجة HTML أكثر غنى. برمجة سعيدة! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +تغطي الدروس التالية مواضيع ذات صلة وثيقة تبني على التقنيات التي تم توضيحها في هذا الدليل. كل مورد يتضمن شيفرات عمل كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [إنشاء عنصر HTML جديد باستخدام جافا – دليل Aspose.HTML الكامل](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [إرفاق عنصر فرعي إلى الجسم في جافا – درس Aspose.HTML الكامل](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [إرفاق عنصر إلى الجسم باستخدام Aspose.HTML for Java مع مراقب تعديل DOM](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/arabic/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..48f8edc311 --- /dev/null +++ b/html/arabic/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-09-29 +description: تعلم كيفية اختيار العناصر حسب الفئة، وقراءة HTML من ملف، وإيجاد الروابط + الخارجية في جافا. يغطي هذا الدليل خطوة بخطوة تكرار NodeList بكفاءة. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: ar +lastmod: 2026-09-29 +og_description: حدد العناصر حسب الفئة في Java، اقرأ HTML من ملف، وابحث عن الروابط + الخارجية باستخدام querySelectorAll. اتبع المثال الكامل لتكرار NodeList. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: اختر العناصر حسب الفئة في جافا – دليل كامل مع querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: كيفية اختيار العناصر حسب الفئة في جافا باستخدام querySelectorAll +url: /ar/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية اختيار العناصر حسب الفئة في Java باستخدام querySelectorAll + +إذا كنت بحاجة إلى **select elements by class** أثناء معالجة ملف HTML في Java، فإن هذا الدليل يوضح لك بالضبط كيفية القيام بذلك. ستتعلم كيفية قراءة HTML من ملف، واستخدام `querySelectorAll` للعثور على الروابط الخارجية، وتكرار `NodeList` الناتج بأمان. + +التعامل مع HTML في Java غالبًا ما يبدو ثقيلًا، لكن المكتبات الحديثة توفر لك واجهة برمجة تطبيقات مختصرة تعتمد على محددات CSS. المثال أدناه يستخدم **jsoup** (الإصدار 1.17.2) لأنه ينفذ محددات على نمط `querySelectorAll` ويعيد مجموعة `Elements` تتصرف مثل `NodeList`. يمكنك تعديل نفس المنطق لتطبيقات DOM أخرى إذا لزم الأمر. + +## المتطلبات المسبقة + +* JDK 17 أو أحدث مثبت. +* Maven أو Gradle لإدارة الاعتمادات. +* إلمام أساسي بـ Java streams ونموذج DOM. + +Add jsoup to your project: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## الخطوة 1: قراءة HTML من ملف + +المهمة الأولى هي تحميل مستند HTML من القرص. `Jsoup.parse(Path, Charset)` يقرأ الملف ويبني شجرة DOM يمكنك الاستعلام عنها. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*لماذا هذا مهم*: تحميل الملف مرة واحدة يجنب عمليات I/O المتكررة أثناء تكرار العناصر لاحقًا. كائن `Document` يحتفظ بـ DOM الكامل، مما يتيح استعلامات محددات سريعة. + +## الخطوة 2: استخدام `querySelectorAll` لاختيار العناصر حسب الفئة + +الآن بعد أن أصبح المستند في الذاكرة، يمكنك **select elements by class** باستخدام محدد CSS. المحدد `"a.external"` يطابق وسوم `` التي تحمل الفئة `external`—وهو بالضبط ما تحتاجه **للعثور على الروابط الخارجية**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*لماذا هذا مهم*: استخدام محدد الفئة هو تعبيري وفعال. المكتبة تترجم المحدد إلى تجوال محسّن، لذا لا تحتاج إلى كتابة حلقات يدوية على كل عقدة. + +## الخطوة 3: تكرار NodeList (Elements) في Java + +`Elements` تنفذ `Iterable`، مما يعني أنه يمكنك استخدام حلقة `for‑e​ach` القياسية **iterate NodeList Java**. الحلقة أدناه تطبع سمة `href` لكل رابط. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*لماذا هذا مهم*: التكرار المباشر يحافظ على قابلية قراءة الكود ويتجنب عبء تحويل المجموعة إلى stream عندما تحتاج فقط إلى إخراج بسيط. + +## مثال كامل يعمل + +جمع الخطوات الثلاث معًا ينتج برنامجًا مستقلًا يمكنك تشغيله من سطر الأوامر. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### النتيجة المتوقعة + +بافتراض أن `input.html` يحتوي على: + +```html +Example +About +OpenAI +``` + +تشغيل البرنامج يطبع: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## نصائح احترافية ومخاطر شائعة + +* **Encoding matters** – دائمًا اقرأ الملف بـ UTF‑8 (أو مجموعة الأحرف التي تتطابق مع المصدر). الترميز غير الصحيح قد يفسد الأحرف في قيم السمات. +* **Multiple classes** – إذا كان للعنصر عدة فئات (مثال: `class="btn external"`)، فإن المحدد `"a.external"` لا يزال يطابق لأنه في CSS يتم فحص وجود الرمز، وليس السلسلة الكاملة. +* **Performance tip** – إذا كنت بحاجة فقط إلى سمة `href`، يمكنك طلبها مباشرة باستخدام `doc.select("a.external[href]").eachAttr("href")`. هذا يتجنب إنشاء كائنات `Element` كاملة لكل تطابق. +* **Null safety** – `link.attr("href")` تُعيد سلسلة فارغة إذا كانت السمة مفقودة، لذا لا تحتاج إلى فحص null قبل الطباعة. + +## الأسئلة المتكررة + +**س: هل يعمل هذا مع مقاطع HTML التي تفتقد جذر ``؟** +ج: نعم. `Jsoup.parse` يتعامل مع الإدخال كقطعة ويضيف تلقائيًا العناصر الجذرية المفقودة، مما يسمح للمحددات بالعمل على جسم القطعة. + +**س: هل يمكنني استخدام `querySelectorAll` بدون jsoup؟** +ج: واجهة برمجة تطبيقات DOM القياسية في Java (`org.w3c.dom`) لا تتضمن `querySelectorAll`. مكتبات مثل **HTMLUnit** أو **jodd-lagarto** توفر طرقًا مشابهة. النمط المعروض هنا—التحميل، الاختيار باستخدام CSS، التكرار—يبقى هو نفسه. + +**س: ماذا لو احتجت لتعديل الروابط بدلاً من مجرد طباعتها؟** +ج: بعد الحصول على كل `Element`، يمكنك استدعاء `link.attr("href", "newUrl")` ثم كتابة المستند مرة أخرى إلى القرص باستخدام `Files.writeString`. + +## الخلاصة + +أنت الآن تعرف كيف **select elements by class**، **read HTML from file**، **find external links**، و **iterate a NodeList in Java** باستخدام محددات على نمط `querySelectorAll`. المثال الكامل يوضح سير عمل نظيف وجاهز للإنتاج يمكنك دمجه في خطوط تجريف أو تحويل أكبر. + +بعد ذلك، استكشف المواضيع ذات الصلة مثل **parsing dynamic content with HTMLUnit**، **writing modified HTML back to disk**، أو **using Java streams to collect link URLs into a list**. كل من هذه يبني على التقنية الأساسية لاختيار العناصر حسب الفئة التي تم توضيحها هنا. Happy coding! + +## ما الذي ينبغي أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة كود كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Iterate NodeList Java – Read HTML & Get Image src](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [Load HTML Documents from File in Aspose.HTML for Java](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/java/css-html-form-editing/_index.md b/html/arabic/java/css-html-form-editing/_index.md index a2301ec45b..f9316a10f7 100644 --- a/html/arabic/java/css-html-form-editing/_index.md +++ b/html/arabic/java/css-html-form-editing/_index.md @@ -38,6 +38,8 @@ url: /ar/java/css-html-form-editing/ ### [تحديد العنصر حسب الفئة في Java – دليل شامل خطوة بخطوة](./select-element-by-class-in-java-complete-how-to-guide/) تعلم كيفية اختيار عناصر HTML باستخدام الفئة في Java باستخدام Aspose.HTML خطوة بخطوة. ### [كيفية قراءة CSS في Java – دليل شامل مع Aspose.HTML](./how-to-read-css-in-java-complete-guide-with-aspose-html/) +### [كيفية قراءة CSS من HTML باستخدام Aspose.HTML في Java](./how-to-read-css-from-html-with-aspose-html-in-java/) +تعلم كيفية استخراج ملفات CSS من مستندات HTML برمجيًا باستخدام Aspose.HTML في Java. ### [تحليل HTML باستخدام Java: استخراج خاصية CSS والحصول على حجم الخط](./parse-html-with-java-extract-css-property-and-get-font-size/) تعلم كيفية استخراج خاصية CSS مثل حجم الخط من مستندات HTML برمجيًا باستخدام Aspose.HTML for Java. ### [كيفية الاستعلام عن HTML في Java – تحميل HTML، محدد CSS، واستخراج العناوين](./how-to-query-html-in-java-load-html-css-selector-and-extract/) diff --git a/html/arabic/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/arabic/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..e8d0557730 --- /dev/null +++ b/html/arabic/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,276 @@ +--- +category: general +date: 2026-09-29 +description: كيفية قراءة CSS من HTML باستخدام Aspose.HTML للغة Java. تعلم اختيار العنصر + حسب المعرف (ID)، الحصول على النمط المحسوب، استخراج خصائص CSS، وعرض لون الخلفية. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: ar +lastmod: 2026-09-29 +og_description: كيفية قراءة CSS من HTML باستخدام Aspose.HTML للغة Java. تعليمات خطوة + بخطوة لتحديد العنصر بواسطة المعرف، الحصول على النمط المحسوب، استخراج CSS، وعرض لون + الخلفية. +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: كيفية قراءة CSS من HTML باستخدام Aspose.HTML – دليل Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: كيفية قراءة CSS من HTML باستخدام Aspose.HTML في Java +url: /ar/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية قراءة CSS من HTML باستخدام Aspose.HTML في Java + +إذا كنت بحاجة إلى **كيفية قراءة CSS** من ملف HTML في تطبيق Java، فإن هذا الدليل يوضح لك ذلك خطوة بخطوة. بحلول نهاية الجملتين الأوليين ستعرف كيف تختار عنصرًا بالمعرف، تحصل على النمط المحسوب، وتعرض لون الخلفية—كل ذلك باستخدام Aspose.HTML. + +سنستعرض تحميل مستند HTML، تحديد عنصر معين، استخراج CSS المحسوب، وطباعة قيمة لون الخلفية. لا تحتاج إلى أدوات خارجية بخلاف مكتبة Aspose.HTML لـ Java، والكود يعمل مع Java 8+. + +## ما ستتعلمه + +* كيفية قراءة CSS من مستند HTML باستخدام Aspose.HTML. +* كيفية **اختيار عنصر بالمعرف** باستخدام `querySelector`. +* كيفية **الحصول على النمط المحسوب** لأي عقدة DOM. +* كيفية **استخراج CSS من HTML** وقراءة الخصائص الفردية مثل **عرض لون الخلفية**. +* الأخطاء الشائعة ونصائح أفضل الممارسات لاستخراج CSS موثوق. + +### المتطلبات المسبقة + +* تثبيت Java 8 أو أحدث. +* Maven أو Gradle لإدارة تبعية Aspose.HTML. +* ملف HTML بسيط (مثال: `input.html`) يحتوي على عنصر بخصيصة `id` تريد فحصه. + +--- + +## الخطوة 1: تحميل مستند HTML (كيفية قراءة CSS) + +أول عملية في أي سير عمل لقراءة CSS هي تحميل ملف HTML المصدر. توفر Aspose.HTML الفئة `HTMLDocument` التي تقوم بتحليل الملف وبناء DOM يمكنك الاستعلام عنه. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**لماذا هذا مهم:** تحميل المستند يُنشئ DOM كاملًا، مما يتيح حساب الأنماط بشكل موثوق كما يفعل المتصفح. تخطي هذه الخطوة سيتركك مع نص خام بدلاً من مستند مُهيكل. + +--- + +## الخطوة 2: اختيار عنصر بالمعرف + +لاستخراج CSS لعقدة محددة، تحتاج أولاً إلى مرجع لتلك العقدة. طريقة `querySelector` تقبل أي محدد CSS، مما يجعلها مثالية للاختيار بالمعرف. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**لماذا نستخدم `querySelector`؟:** تتبع نفس صياغة المحددات التي تستخدمها في CSS، لذا يمكنك إعادة استخدام الأنماط المألوفة مثل `#myDiv` أو `.className` أو محددات السمات دون الحاجة إلى منطق تحليل إضافي. + +--- + +## الخطوة 3: الحصول على النمط المحسوب للعنصر + +بمجرد حصولك على العنصر، يمكن لـ Aspose.HTML حساب **النمط المحسوب**—القيم النهائية بعد تطبيق جميع قواعد CSS، والوراثة، والقيم الافتراضية. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**لماذا نحسب النمط؟:** النمط المحسوب يعكس القيم الفعلية التي سيعرضها المتصفح، وليس مجرد التصريحات الخام. هذا ضروري عندما تحتاج إلى معرفة `background-color` الفعلي، أو `font-size`، أو أي خاصية أخرى. + +--- + +## الخطوة 4: استخراج خاصية CSS وعرض لون الخلفية + +الآن بعد أن حصلت على `StyleDeclaration`، يمكنك قراءة أي خاصية CSS. في هذا المثال نركز على **عرض لون الخلفية**، لكن نفس النهج يعمل مع `font-size`، `margin`، إلخ. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**الناتج المتوقع** + +``` +Background color: rgb(255, 0, 0) +``` + +إذا كان العنصر يرث خلفيته من عنصر أب أو من ورقة أنماط، فإن القيمة المحسوبة ستشمل تلك الوراثة بالفعل. + +--- + +## معالجة الحالات الخاصة والاختلافات + +### العنصر غير موجود +إذا أعادت `querySelector` القيمة `null`، فإن الكود أعلاه يطبع خطأً بالفعل ويخرج. في بيئة الإنتاج قد ترغب في رمي استثناء مخصص أو الرجوع إلى عنصر افتراضي. + +### وجود عناصر متعددة بنفس المعرف (HTML غير صالح) +على الرغم من أن المعرفات يجب أن تكون فريدة، قد يحتوي HTML غير صحيح على تكرارات. تُعيد `querySelector` أول تطابق. لمعالجة جميع التطابقات، استخدم `querySelectorAll` وتكرار `NodeList` الناتج. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### خصائص CSS مختلفة +لـ **استخراج CSS من HTML** بخلاف لون الخلفية، ما عليك سوى استدعاء الدالة المناسبة على `StyleDeclaration`. تشمل الدوال الشائعة: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +إذا لم تُحدد خاصية صراحةً، فإن الدالة تُعيد القيمة الافتراضية المحسوبة (مثال: `display: block` لعنصر `
`). + +### البادئات الخاصة بالمتصفحات +يقوم Aspose.HTML بتطبيع الخصائص ذات البادئات الخاصة بالموردين (مثل `-webkit-transform`) إلى ما يعادلها القياسي عندما يكون ذلك ممكنًا. إذا كنت تحتاج إلى القيمة الخام، يمكنك الاستعلام مباشرةً عن خريطة `StyleDeclaration`: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +--- + +## مثال كامل قابل للتنفيذ + +فيما يلي فئة Java مكتفية ذاتيًا تجمع جميع الخطوات معًا. استبدل `YOUR_DIRECTORY/input.html` بمسار ملف HTML الخاص بك. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**تشغيل البرنامج** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +يجب أن ترى لون الخلفية مطبوعًا في وحدة التحكم، مما يؤكد أنك نجحت في **كيفية قراءة CSS**، **اختيار عنصر بالمعرف**، **الحصول على النمط المحسوب**، و**عرض لون الخلفية**. + +--- + +## نصائح أفضل الممارسات (نصائح احترافية) + +* **قم بتخزين `HTMLDocument` في الذاكرة** إذا كنت تحتاج إلى قراءة CSS من العديد من العناصر؛ فقراءة الملف مرارًا وتكرارًا تضر بالأداء. +* **تحقق من صحة HTML** قبل التحميل—الترميز غير السليم قد يؤدي إلى فقدان العقد أو قيم محسوبة غير صحيحة. +* **استخدم try‑with‑resources** (أو `dispose` صريح) لتحرير الموارد الأصلية التي تحتفظ بها كائنات Aspose.HTML. +* **سجّل `StyleDeclaration` بالكامل** عند تصحيح الأنماط المعقدة: `System.out.println(computedStyle.getCssText());` يمنحك لقطة لكل خاصية محسوبة. + +--- + +## الخلاصة + +أنت الآن تعرف **كيفية قراءة CSS** من ملف HTML في Java باستخدام Aspose.HTML. من خلال تحميل المستند، **اختيار العنصر بالمعرف**، **الحصول على النمط المحسوب**، واستخراج خاصية **لون الخلفية**، يمكنك فحص أي معلومات تنسيق يطبقها المتصفح برمجيًا. + +من هنا يمكنك توسيع الحل لاستخراج سمات CSS أخرى، معالجة عناصر متعددة، أو دمج البيانات في إطار اختبار واجهة المستخدم. + +برمجة سعيدة، ولا تتردد في تجربة محددات وخصائص نمط مختلفة لتناسب احتياجات مشروعك! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة شفرة كاملة مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف نهج تنفيذ بديلة في مشاريعك. + +- [How to Get CSS in Java – Retrieve Computed Style with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [how to read css in Java – Complete Guide with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/arabic/java/editing-html-documents/_index.md b/html/arabic/java/editing-html-documents/_index.md index ef3f073939..121762ae62 100644 --- a/html/arabic/java/editing-html-documents/_index.md +++ b/html/arabic/java/editing-html-documents/_index.md @@ -63,6 +63,8 @@ url: /ar/java/editing-html-documents/ تعلم كيفية إنشاء عنصر HTML جديد في Java باستخدام Aspose.HTML خطوة بخطوة. ### [مجموعة مؤشرات ثابتة Java – تنظيف HTML متوازي باستخدام ExecutorService](./fixed-thread-pool-java-parallel-html-cleaning-with-executors/) ### [إضافة عنصر فرعي إلى الجسم في Java – دليل Aspose.HTML الكامل](./append-child-to-body-in-java-full-aspose-html-tutorial/) +### [كيفية تغيير لون الخلفية باستخدام JavaScript في Java](./how-to-change-background-color-javascript-using-java/) +دليل خطوة بخطوة لتغيير لون خلفية صفحة الويب باستخدام JavaScript داخل تطبيق Java. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/arabic/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/arabic/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..5fdfd896b5 --- /dev/null +++ b/html/arabic/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,246 @@ +--- +category: general +date: 2026-09-29 +description: تغيير لون الخلفية باستخدام جافاسكريبت في ملف HTML عبر جافا. تعلم كيفية + تحميل HTML في جافا، تشغيل جافاسكريبت داخل HTML، وتعديل HTML باستخدام جافا لتغيير + خلفية الصفحة. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: ar +lastmod: 2026-09-29 +og_description: تغيير لون الخلفية باستخدام جافا سكريبت في صفحة HTML باستخدام Java. + يوضح لك هذا الدرس كيفية تحميل HTML في Java، تشغيل JavaScript في HTML، وتعيين خلفية + الصفحة برمجيًا. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: تغيير لون الخلفية باستخدام جافاسكريبت وجافا – دليل خطوة بخطوة +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: كيفية تغيير لون الخلفية باستخدام جافا سكريبت وجافا +url: /ar/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# كيفية تغيير لون الخلفية باستخدام JavaScript في Java + +إذا كنت بحاجة إلى **تغيير لون الخلفية باستخدام JavaScript** في ملف HTML موجود، يمكنك القيام بذلك بالكامل من خلال Java دون فتح متصفح. يوضح لك هذا الدليل كيفية **تحميل HTML في Java**، وتنفيذ مقتطف صغير من JavaScript، ثم **تعديل HTML باستخدام Java** بحيث يتم تحديث خلفية الصفحة. + +يعمل الحل مع مكتبة **HTMLUnit** مفتوحة المصدر، التي توفر متصفحًا بدون واجهة يمكنه تقييم JavaScript بنفس دقة المتصفح الحقيقي. بحلول نهاية هذا الدليل ستحصل على طريقة قابلة لإعادة الاستخدام **تضبط خلفية الصفحة** إلى أي لون تختاره. + +## المتطلبات المسبقة + +| ما تحتاجه | لماذا يهم | +|-----------|-----------| +| Java 8 أو أحدث | HTMLUnit تتطلب على الأقل Java 8. | +| أداة بناء Maven أو Gradle | لسحب تبعية HTMLUnit تلقائيًا. | +| ملف HTML تريد تحريره (مثال: `input.html`) | المستند المصدر الذي سيتم تحميله وتعديله. | + +أضف HTMLUnit إلى مشروعك: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **نصيحة احترافية:** استخدم أحدث نسخة مستقرة من HTMLUnit للحصول على أكثر محرك JavaScript دقة. + +## تغيير لون الخلفية باستخدام JavaScript – تحميل HTML في Java + +الخطوة الأولى هي تحميل مستند HTML إلى كائن `HTMLPage`. هذا يمنحك واجهة برمجة تطبيقات شبيهة بـ DOM وسياق تنفيذ JavaScript. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*لماذا هذا مهم*: `WebClient` ينشئ بيئة معزولة حيث يمكن تشغيل JavaScript، لذا يمكنك **تشغيل js في html** بنفس الطريقة التي يعمل بها متصفح المستخدم. + +## تشغيل js في html لتعيين خلفية الصفحة + +بمجرد تحميل الصفحة، يمكنك تقييم أي تعبير JavaScript. المقتطف أدناه يغيّر نمط `backgroundColor` للعنصر ``. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*شرح*: +- `document.body.style.backgroundColor` هو الخاصية القياسية في DOM لخلفية الصفحة. +- من خلال استدعاء `eval`، نحن **نشغل js في html** دون الحاجة إلى نافذة متصفح حقيقية. +- الطريقة قابلة لإعادة الاستخدام لأي لون، وتلبي متطلب **تعيين خلفية الصفحة**. + +## تعديل html باستخدام java وحفظ النتيجة + +بعد تشغيل السكريبت، يعكس الـ DOM النمط الجديد. يمكنك الآن كتابة الـ HTML المحدث إلى القرص. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +جمع كل شيء معًا يمنحك برنامجًا واحدًا قابلاً للتنفيذ: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### المخرجات المتوقعة + +تشغيل البرنامج يطبع: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +فتح `js_modified.html` في أي متصفح يظهر الصفحة بخلفية زرقاء فاتحة، مما يؤكد أن عملية **تغيير لون الخلفية باستخدام JavaScript** نجحت. + +## الاختلافات الشائعة وحالات الحافة + +| الحالة | كيفية التعامل | +|--------|----------------| +| **تنسيقات ألوان مختلفة** | مرّر أي قيمة متوافقة مع CSS (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **غياب وسم ``** | سيفشل السكريبت بصمت؛ يمكنك أولاً التأكد من وجود `` باستخدام `page.getFirstByXPath("//body")`. | +| **ملفات HTML الكبيرة** | عطّل CSS (`setCssEnabled(false)`) وفعل فقط ميزات JavaScript التي تحتاجها لتقليل استهلاك الذاكرة. | +| **تشغيل سكريبتات متعددة** | استدعِ `changeBackground` بشكل متكرر أو أنشئ طريقة مساعدة تقبل قائمة من أوامر JavaScript. | + +## الخلاصة + +أنت الآن تعرف كيف **تغيير لون الخلفية باستخدام JavaScript** عن طريق تحميل ملف HTML في Java، **تشغيل js في html**، و**تعديل html باستخدام java** لت **تعيين خلفية الصفحة** إلى أي لون تختاره. المثال الكامل أعلاه يعمل مع أحدث مكتبة HTMLUnit ويمكن دمجه في خطوط أتمتة أكبر، مثل معالجة تقارير HTML على دفعات أو إعداد قوالب البريد الإلكتروني. + +**الخطوات التالية** +- استكشف عمليات تعديل DOM الأخرى (مثل إدراج عناصر، إزالة سكريبتات). +- اجمع هذه الطريقة مع أداة توليد PDF لإنشاء ملفات PDF للصفحات ذات الأنماط. +- جرّب استخدام محرك headless مختلف مثل Selenium WebDriver إذا كنت بحاجة إلى محاكاة كاملة للمتصفح. + +برمجة سعيدة! + +## ما الذي يجب أن تتعلمه بعد ذلك؟ + +الدروس التالية تغطي مواضيع ذات صلة وثيقة تبني على التقنيات الموضحة في هذا الدليل. كل مورد يتضمن أمثلة شفرة كاملة تعمل مع شروحات خطوة بخطوة لمساعدتك على إتقان ميزات API إضافية واستكشاف أساليب تنفيذ بديلة في مشاريعك. + +- [احصل على النمط المحسوب Java – استخراج لون الخلفية من HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [كيفية تحميل HTML، ضبط DPI للجهاز وقراءة لون الخلفية](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [إنشاء HTML من JavaScript في Java – دليل خطوة بخطوة كامل](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/java/configuring-environment/_index.md b/html/chinese/java/configuring-environment/_index.md index 0fd32c8e29..0a3bc4913e 100644 --- a/html/chinese/java/configuring-environment/_index.md +++ b/html/chinese/java/configuring-environment/_index.md @@ -53,6 +53,9 @@ weight: 29 [了解如何在 Aspose.HTML for Java 中设置网络服务。](./setup-network-service/) +### [在 Aspose.HTML for Java 中设置自定义用户代理和屏幕尺寸](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +了解如何在 Aspose.HTML for Java 中设置自定义用户代理和屏幕尺寸,以控制渲染行为。 + ## 如何配置运行时服务 动态 HTML 通常包含在渲染前必须运行的脚本。运行时服务控制脚本执行,允许您限制 CPU 使用率、设置超时并防止无限循环——这对于实现稳定、高性能的转换至关重要。 @@ -108,6 +111,9 @@ A: 沙箱会限制某些 API(例如 `window.open`),但普通的 DOM 操作 ### [在 Aspose.HTML for Java 中设置网络服务](./setup-network-service/) 了解如何在 Aspose.HTML for Java 中设置网络服务,管理网络资源,并使用自定义错误处理将 HTML 转换为 PNG。 +### [在 Aspose.HTML for Java 中设置自定义用户代理和屏幕尺寸](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +了解如何在 Aspose.HTML for Java 中设置自定义用户代理和屏幕尺寸,以控制渲染行为。 + ### [在 Aspose.HTML for Java 中配置运行时服务](./configure-runtime-service/) 了解如何在 Aspose.HTML for Java 中配置 Runtime Service,以优化脚本执行,防止无限循环并提升应用性能。 diff --git a/html/chinese/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/chinese/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..669c110892 --- /dev/null +++ b/html/chinese/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,189 @@ +--- +category: general +date: 2026-09-29 +description: 在 Aspose.HTML for Java 中设置自定义用户代理,并学习如何设置虚拟屏幕尺寸以实现准确的 HTML 渲染。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: zh +lastmod: 2026-09-29 +og_description: 在 Aspose.HTML for Java 中设置自定义用户代理,并了解如何设置虚拟屏幕尺寸以实现准确的 HTML 渲染。 +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: 在 Aspose.HTML for Java 中设置自定义用户代理和屏幕尺寸 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: 在 Aspose.HTML for Java 中设置自定义用户代理和屏幕尺寸 +url: /zh/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 Aspose.HTML for Java 中设置自定义用户代理和屏幕尺寸 + +如果您需要在使用 Aspose.HTML for Java 渲染 HTML 时**设置自定义用户代理**,本指南将准确展示如何操作。通过配置 sandbox,您还可以**设置虚拟屏幕尺寸**,确保布局匹配真实浏览器视口。 + +您将完成本教程,获得一个完整的可运行程序,能够**指定用户代理**、**设置屏幕宽度**和**设置屏幕高度**。无需外部工具——只需 Aspose.HTML for Java 和 Java 8+ 运行时。 + +## 您将学习 + +* 如何创建 `SandboxConfiguration` 以隔离渲染。 +* 如何**设置自定义用户代理**以及它对响应式页面的重要性。 +* 如何**设置虚拟屏幕尺寸**(屏幕宽度和高度)以获得准确的布局。 +* 如何在 sandbox 中加载 HTML 文件并保存处理后的结果。 +* 常见陷阱以及 sandbox 渲染的最佳实践技巧。 + +> **先决条件** – 您需要有效的 Aspose.HTML for Java 许可证、Java 8 或更高版本,以及一个 IDE(IntelliJ IDEA、Eclipse 或 VS Code)。示例使用本地 `input.html` 文件,但任何可访问的 URL 都可使用。 + +![沙箱流程图](sandbox-flow.png "Java 中设置自定义用户代理示例") + +## 步骤 1:创建 sandbox 配置(基础) + +sandbox 将渲染环境与宿主 JVM 隔离,这在您想要**设置自定义用户代理**或更改视口尺寸时至关重要。 + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*此步骤的原因?* +`SandboxConfiguration` 保存所有渲染选项,包括**屏幕尺寸**和**用户代理**字符串。通过在加载文档之前进行配置,您可以确保 HTML 引擎从第一次请求起就遵循这些设置。 + +## 步骤 2:设置屏幕尺寸以模拟真实设备 + +响应式站点通常读取 `window.innerWidth` 和 `window.innerHeight`。为了让引擎认为它运行在 1024 × 768 的屏幕上,您需要**设置虚拟屏幕尺寸**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*此项重要性* – 如果省略**设置屏幕尺寸**,渲染器可能默认使用极小的视口,导致 CSS 媒体查询选择移动布局。通过显式**设置屏幕宽度**和**设置屏幕高度**,您可以控制触发哪些 CSS 规则。 + +## 步骤 3:指定自定义用户代理字符串 + +某些网页会根据用户代理头部提供不同内容。要**指定用户代理**,只需在 sandbox 配置上设置即可: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*为何使用自定义用户代理?* +自定义字符串可以绕过机器人检测、触发仅桌面可用的功能,或测试站点在特定浏览器版本下的表现。Aspose 引擎在加载外部资源(CSS、图像、脚本)时,会在每个 HTTP 请求中转发此值。 + +## 步骤 4:在 sandbox 中加载 HTML 文档 + +现在 sandbox 已完全配置好,加载 HTML 文件。接受文件路径和 `SandboxConfiguration` 的构造函数会自动应用我们定义的所有设置。 + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +如果需要从远程 URL 加载,只需将文件路径替换为 URL 字符串——Aspose.HTML 仍会遵守**设置的自定义用户代理**和**屏幕尺寸**。 + +## 步骤 5:保存处理后的输出 + +文档加载完成后,您可以将其保存为任何受支持的格式。这里我们写入一个 sandbox HTML 文件,反映自定义设置导致的任何 DOM 更改。 + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +保存的文件将包含相同的标记,但任何查询 `navigator.userAgent` 或检查 `window.innerWidth` 的脚本现在都会看到您提供的值。 + +## 完整、可运行的示例 + +将所有步骤组合在一起,即可得到一个可自行复制、粘贴并运行的独立程序。 + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### 预期输出 + +运行程序会生成 `sandboxed_output.html`。如果在浏览器中打开并通过控制台检查 `navigator.userAgent`,您会看到 **AsposeHTML/1.0**。同样,`window.innerWidth` 将报告 **1024**,确认**设置屏幕尺寸**已按预期工作。 + +## 常见问题与边缘情况处理 + +| Question | Answer | +|----------|--------| +| **如果页面从不同域加载额外资源怎么办?** | sandbox 会在每个请求中转发**自定义用户代理**,但跨域策略仍然适用。如果需要放宽这些限制,请使用 `sandboxConfig.setAllowCrossDomain(true)`。 | +| **文档加载后我可以更改屏幕尺寸吗?** | 不能。屏幕尺寸在初始布局阶段读取。若要使用不同尺寸渲染,请创建新的 `SandboxConfiguration` 并重新加载文档。 | +| **我需要调用 `document.close()` 吗?** | `HTMLDocument` 实现了 `AutoCloseable`。使用 try‑with‑resources 块可确保正确清理,但在简单脚本中显式 `close()` 是可选的。 | +| **这与在 HTTP 客户端设置用户代理有何不同?** | 在 sandbox 上设置用户代理会影响 HTML 引擎发出的**所有**资源请求,而不仅仅是初始 HTML 的获取。这更贴近真实浏览器的行为。 | +| **sandbox 对不可信的 HTML 安全吗?** | 是的。sandbox 根据配置隔离文件系统访问并限制网络调用,降低恶意脚本影响宿主 JVM 的风险。 | + +## 专业技巧 + +* **复用配置** – 如果需要渲染多个具有相同视口的页面,创建一个 `SandboxConfiguration` 并重复使用,以避免对象创建开销。 +* **通过日志调试** – 启用 Aspose.HTML 日志 (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) 以查看哪些资源是使用自定义用户代理获取的。 +* **结合 CSS 媒体查询** – 通过调整**设置屏幕宽度**,您可以在不打开真实浏览器的情况下测试响应式设计在平板、手机或大型桌面上的表现。 + +## 结论 + +现在您已经了解了在使用 Aspose.HTML for Java 渲染 HTML 时如何**设置自定义用户代理**和**设置屏幕尺寸**。通过配置 sandbox,您可以隔离环境、控制视口,并确保外部资源看到您指定的精确请求头。此技术对于测试响应式布局、绕过机器人拦截或在自动化流水线中复现仅桌面可用的功能至关重要。 + +接下来,您可以探索使用 Aspose.HTML 渲染 API 的**设置自定义 Cookie**或**捕获渲染截图**——这两者都基于您刚刚掌握的相同 sandbox 配置模式。 + +祝编码愉快! + +## 接下来您应该学习什么? + +以下教程涵盖与本指南演示的技术密切相关的主题。每个资源都包含完整的可运行代码示例和逐步说明,帮助您掌握更多 API 功能并在项目中探索替代实现方法。 + +- [Java 中的高 DPI 渲染 – 使用自定义用户代理捕获网页截图](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [如何加载 HTML、设置设备 DPI 并读取背景颜色](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [创建 HTML 文件(Java)并设置网络服务 (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/java/creating-managing-html-documents/_index.md b/html/chinese/java/creating-managing-html-documents/_index.md index 94ca277032..bcfb2572ee 100644 --- a/html/chinese/java/creating-managing-html-documents/_index.md +++ b/html/chinese/java/creating-managing-html-documents/_index.md @@ -58,6 +58,8 @@ Aspose.HTML for Java 为开发人员提供了功能强大的工具包,旨在 了解如何使用 Aspose.HTML for Java 从流中加载 HTML 文档。本指南提供了无缝 HTML 操作的分步教程。 ### [在 Aspose.HTML for Java 中从字符串创建 HTML 文档](./create-html-documents-from-string/) 通过本分步指南了解如何在 Aspose.HTML for Java 中从字符串创建 HTML 文档。 +### [如何在 Java 中使用 Aspose.HTML 创建 HTML 元素](./how-to-create-html-element-in-java-using-aspose-html/) +学习如何使用 Aspose.HTML 在 Java 中创建 HTML 元素的分步指南。 ### [在 Aspose.HTML for Java 中从 URL 加载 HTML 文档](./load-html-documents-from-url/) 了解如何使用 Aspose.HTML 轻松地从 Java 中的 URL 加载 HTML 文档。内含分步教程。 ### [使用 Aspose.HTML for Java 生成新的 HTML 文档](./generate-new-html-documents/) @@ -74,11 +76,14 @@ Aspose.HTML for Java 为开发人员提供了功能强大的工具包,旨在 本教程详细讲解如何使用 Aspose.HTML for Java 加载 HTML、执行查询并统计元素数量,帮助您高效解析网页。 ### [在 Java 中加载 HTML 文档 – 完整指南,包含 XPath 与 CSS](./load-html-document-java-complete-guide-with-xpath-css/) 本完整指南详细讲解如何在 Java 中使用 Aspose.HTML 加载 HTML 文档,并使用 XPath 与 CSS 进行查询。 +### [如何在 Java 中使用 XPath 统计 HTML 元素](./how-to-count-html-elements-in-java-with-xpath/) ### [在 Java 中提取 HTML 文本 – 完整编程指南](./extract-text-from-html-in-java-complete-programming-guide/) 本完整指南详细讲解如何使用 Aspose.HTML for Java 在 Java 中提取 HTML 文本,包括 API 使用、示例代码和最佳实践。 ### [在 Aspose.HTML for Java 中创建 HTML 沙盒 – 步骤指南](./create-sandbox-for-html-in-java-step-by-step-guide/) ### [在 Java 中统计 HTML 字符 – 使用 Aspose HTML 的完整指南](./count-html-characters-in-java-full-guide-with-aspose-html/) -本完整指南教您如何使用 Aspose.HTML for Java 统计 HTML 文本字符数,涵盖示例代码和最佳实践。 +本完整指南教您如何使用 Aspose.HTML for Java 统计 HTML 文本字符,涵盖示例代码和最佳实践。 +### [如何在 Java 中使用 querySelectorAll 按类选择元素](./how-to-select-elements-by-class-in-java-using-queryselectora/) +本教程演示如何在 Java 使用 Aspose.HTML 的 querySelectorAll 按类名选择 HTML 元素。 {{< /blocks/products/pf/tutorial-page-section >}} @@ -114,4 +119,4 @@ Aspose.HTML for Java 为开发人员提供了功能强大的工具包,旨在 {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/chinese/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..009e0818a9 --- /dev/null +++ b/html/chinese/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,214 @@ +--- +category: general +date: 2026-09-29 +description: 学习如何使用 Aspose.HTML 和 XPath 在 Java 中统计 HTML 元素。本指南展示了如何加载 HTML 文档、使用 XPath + 选择节点以及获取节点列表。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: zh +lastmod: 2026-09-29 +og_description: 如何使用 Aspose.HTML 在 Java 中统计 HTML 元素。请按照本完整教程加载 HTML 文档、使用 XPath 选择节点、在 + Java 中评估 XPath,并获取节点列表。 +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: 如何在 Java 中统计 HTML 元素——一步步指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: 如何在 Java 中使用 XPath 计数 HTML 元素 +url: /zh/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 XPath 计数 HTML 元素 + +如果您需要在 Java 应用程序中**计数 HTML 元素**,本指南提供了一个完整、可直接运行的解决方案。阅读前两句话后,您将准确了解如何加载 HTML 文档、使用 XPath 选择节点以及获取可计数的节点列表。 + +我们将使用 Aspose.HTML for Java 库,因为它提供了兼容 DOM 的 API 和强大的 XPath 引擎。教程涵盖了您所需的全部内容——导入、代码、解释以及预期输出——您可以将示例复制到项目中并立即看到结果。过程中我们还会涉及 **select nodes with XPath**、**get node list Java**、**load HTML document Java** 和 **evaluate XPath in Java**。 + +## 您将实现的目标 + +* 从文件系统加载 HTML 文件。 +* 创建针对特定元素的 XPath 表达式。 +* 在文档上评估 XPath 表达式。 +* 获取 `NodeList` 并统计匹配的元素数量。 + +无需外部服务或复杂配置;只需在类路径中加入 Aspose.HTML JAR 即可。 + +--- + +## 在 Java 中使用 XPath 计数 HTML 元素的步骤 + +本分步章节展示了您所需的完整代码。每个小节对应流程的逻辑部分,便于您进行适配或扩展。 + +### 步骤 1:在 Java 中加载 HTML 文档 + +首先,将 HTML 文件加载到内存中。`HTMLDocument` 类会解析文件并构建可供 XPath 查询的 DOM 树。 + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**这点为何重要:** +加载文档会创建 DOM 表示,这是进行任何 XPath 评估的前提。如果文件路径错误,Aspose.HTML 会抛出 `FileNotFoundException`,因此请仔细检查 `input.html` 的位置。 + +### 步骤 2:创建并评估 XPath 表达式 + +现在我们构建一个 XPath 来选择要计数的元素。在本例中,我们计数所有 `alt` 属性等于 `"logo"` 的 `` 标签。 + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**这点为何重要:** +`//img[@alt='logo']` 表达式是 **select nodes with XPath** 的简洁写法。`evaluate` 调用 **evaluate XPath in Java** 并返回通用的 `XPathResult`。将其强制转换为 `NodeList` 可直接获取匹配节点的集合。 + +### 步骤 3:获取并计数节点列表 + +最后,我们统计返回的节点数量。`NodeList` API 提供 `getLength()` 方法用于此目的。 + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**这点为何重要:** +`getLength()` 是 **get node list Java** 并获取计数的最简方式。如果 XPath 未匹配到任何元素,长度将为 `0`,您的应用程序可以优雅地处理这种情况。 + +### 完整可运行示例 + +下面是完整的程序示例,包含所有导入和一个最小的 `main` 方法。将其复制到名为 `CountHtmlElements.java` 的文件中,向项目中添加 Aspose.HTML JAR 并运行。 + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**预期输出** + +如果 `input.html` 包含三个 `logo` 标签,程序将输出: + +``` +Found 3 logo images. +``` + +如果不存在此类图片,程序将输出: + +``` +Found 0 logo images. +``` + +--- + +## 常见变体和边缘情况 + +| 情况 | 需要更改的内容 | 原因 | +|-----------|----------------|--------| +| 计数不同的元素(例如 class 为 `header` 的 `
`) | 将 XPath 改为 `//div[@class='header']` | XPath 语法允许您定位任意标签/属性。 | +| 计数所有元素,不论属性 | 使用 `//*` 作为 XPath 表达式 | `//*` 选择文档中的每个元素节点。 | +| 大型文档导致内存压力 | 使用流式解析器或在片段上评估 XPath | Aspose.HTML 提供 `HTMLDocumentFragment` 用于部分解析。 | +| 需要实际节点,而不仅是计数 | 遍历 `nodes.item(i)` | 计数后您可以处理每个节点。 | + +**技巧提示:** 在将 XPath 字符串传递给 `createXPathExpression` 之前,请始终进行验证。无效的表达式会抛出 `XPathException`,您可以捕获它并提供友好的错误信息。 + +--- + +## 故障排查清单 + +1. **未找到库** – 确保 Aspose.HTML for Java JAR 已在类路径上(`-cp` 或 IDE 的依赖项)。 +2. **文件未找到** – 验证 `input.html` 相对于工作目录的位置,或使用绝对路径。 +3. **结果为零** – 仔细检查属性值及大小写敏感性(`alt='logo'` 与 `alt='Logo'`)。XPath 区分大小写。 +4. **性能问题** – 如果需要对同一文件执行多次 XPath 查询,请复用同一个 `HTMLDocument` 实例。 + +--- + +## 结论 + +现在,您已经掌握了使用 Aspose.HTML 和 XPath 在 Java 中**计数 HTML 元素**的方法。通过加载 HTML 文档、创建 XPath 表达式、**evaluate XPath in Java**,以及获取 **node list**,您可以快速确定匹配元素的数量。此技术适用于任何标签或属性,是进行网页抓取、自动化测试或内容分析的多功能工具。 + +接下来您可以探索的步骤包括: + +* 使用 **select nodes with XPath** 提取属性值(例如图片的 `src`)。 +* 组合多个 XPath 查询以生成元素统计报告。 +* 将此逻辑集成到处理大量 HTML 文件的 Java 服务中。 + +欢迎尝试不同的 XPath 表达式和文档结构——计数 HTML 元素仅是起点! + +## 接下来您应该学习什么? + +以下教程涵盖与本指南技术密切相关的主题。每个资源都包含完整的可运行代码示例和逐步解释,帮助您掌握更多 API 功能并在项目中探索替代实现方案。 + +- [如何在 Java 中解析 HTML – 加载、查询和计数元素](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [如何在 Java 中查询 HTML – 选择元素、按属性过滤并获取文本](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [在 Java 中加载 HTML 文档 – 包含 XPath 与 CSS 的完整指南](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/chinese/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..34f3f9f7ce --- /dev/null +++ b/html/chinese/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,183 @@ +--- +category: general +date: 2026-09-29 +description: 学习如何在 Java 中创建 HTML 元素,添加段落,设置其文本,并使用 Aspose.HTML 将其追加到 body。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: zh +lastmod: 2026-09-29 +og_description: 使用 Aspose.HTML 在 Java 中创建 HTML 元素,添加段落,设置其文本,并将其追加到 body。 +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: 在 Java 中创建 HTML 元素 – Aspose.HTML 分步指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: 如何在 Java 中使用 Aspose.HTML 创建 HTML 元素 +url: /zh/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 Aspose.HTML 创建 HTML 元素 + +如果您需要在 Java 应用程序中**创建 HTML 元素**,本指南提供了一个完整、可运行的解决方案。您将看到如何**添加段落**、设置其文本,以及使用 Aspose.HTML **将元素追加到现有 HTML 文件的 body**。 + +本教程涵盖了从加载文档到保存修改后文件的全部步骤,您可以直接将代码复制到自己的项目中,无需额外研究。 + +## 前置条件 + +在开始之前,请确保您已具备: + +* 已安装 Java 17 或更高版本。 +* 已将 Aspose.HTML for Java 23.10(或最新版本)添加到项目的类路径中。 +* 在已知目录下准备一个简单的 `input.html` 文件。该文件可以是空的(``)或包含已有的标记。 + +## 第一步:加载现有的 HTML 文档 + +加载源文件后,您将获得一个可操作的 DOM 树。 + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +`HTMLDocument` 构造函数会解析文件并创建一个实时的 DOM。如果文件无法读取,Aspose.HTML 会抛出 `IOException`;您可以让异常向上传递,或使用 try‑catch 块进行处理。 + +## 第二步:创建新的 `

` 元素并向 HTML 添加文本 + +创建新元素的方式类似于在浏览器中使用 `document.createElement`。 + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` 会自动创建文本节点并将其附加到元素上,这是**向 HTML 添加文本**的推荐方式。该方法还会对可能破坏标记的字符进行转义。 + +## 第三步:将元素追加到 body + +段落准备好后,需要将其放置在文档的 `` 中。 + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` 返回 `` 节点,`appendChild` 将新的 `

` 插入为最后一个子节点。如果文档没有 `` 元素(对于结构良好的 HTML 文件几乎不可能),Aspose.HTML 会自动创建一个。 + +## 第四步:保存修改后的文档 + +最后,将更新后的 DOM 写回磁盘。 + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` 会序列化 DOM,保留已有的标记并添加新的段落。生成的 `output.html` 将包含: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## 完整源代码(java html 示例) + +将所有步骤组合在一起,即可得到一个可直接运行的独立程序。 + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### 代码功能说明 + +| 步骤 | 操作 | 原因 | +|------|--------|----------------| +| 加载文档 | `new HTMLDocument(...)` | 将源 HTML 解析为可操作的 DOM。 | +| 创建元素 | `doc.createElement("p")` | 模拟浏览器 API,确保元素符合 HTML 标准。 | +| 设置文本 | `setTextContent(...)` | 保证正确转义,避免手动创建文本节点。 | +| 追加到 body | `doc.getBody().appendChild(...)` | 将新元素放置在浏览器渲染的位置。 | +| 保存文件 | `doc.save(...)` | 持久化更改,生成可供后续使用的有效 HTML 文件。 | + +## 常见变体和边缘情况 + +* **添加多个元素** – 在调用 `save` 之前,对每个新节点重复步骤 2‑3。 +* **在特定节点前插入** – 使用 `insertBefore(newNode, referenceNode)` 而不是 `appendChild`。 +* **使用文档片段** – `doc.createDocumentFragment()` 允许您一次性构建一组节点并附加,提高大规模更新的性能。 +* **处理 UTF‑8 字符** – Aspose.HTML 自动以 UTF‑8 写入;只需确保源文件采用相同编码即可。 + +## 实用技巧 + +* **路径处理** – 使用 `java.nio.file.Paths` 构建跨平台的文件路径。 +* **异常安全** – 如需关闭额外流,可将整个代码块包装在 try‑with‑resources 语句中。 +* **性能** – 对于非常大的 HTML 文件,考虑使用 `HTMLDocument(String, LoadOptions)` 加载文档,您可以禁用外部资源以加快解析速度。 + +## 验证结果 + +运行程序后,在任意浏览器中打开 `output.html`。您应当看到段落 “Added by Aspose.HTML” 出现在原始 body 结束的位置。检查页面源代码以确认 `

` 元素已存在于 `` 中。 + +## 结论 + +现在,您已经了解如何使用 Aspose.HTML 在 Java 中**创建 HTML 元素**、**添加段落**、**向 HTML 添加文本**以及**将元素追加到 body**。完整的 **java html 示例** 展示了一个简洁、可投入生产的工作流,您可以基于它扩展以操作 HTML 文档的任意部分。 + +接下来,您可以探索诸如**修改属性**、**删除节点**或**使用 CSS 样式**等相关主题,以构建更丰富的 HTML 处理流水线。祝编码愉快! + +## 接下来您应该学习什么? + +以下教程涵盖与本指南技术紧密相关的主题,帮助您进一步学习。每个资源都提供完整的可运行代码示例和逐步解释,助您掌握更多 API 功能并在项目中探索替代实现方案。 + +- [使用 Java 创建新 HTML 元素 – 完整 Aspose.HTML 指南](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [在 Java 中将子节点追加到 body – 完整 Aspose.HTML 教程](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [使用 DOM 变动观察器在 Aspose.HTML for Java 中将元素追加到 Body](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/chinese/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..7fe36bc17f --- /dev/null +++ b/html/chinese/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-09-29 +description: 学习如何按类选择元素、从文件读取HTML,并在 Java 中查找外部链接。本分步指南涵盖高效遍历 NodeList 的方法。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: zh +lastmod: 2026-09-29 +og_description: 在 Java 中按类选择元素,从文件读取 HTML,并使用 querySelectorAll 查找外部链接。请参照完整示例遍历 NodeList。 +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: 在 Java 中按类选择元素 – 使用 querySelectorAll 的完整指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: 如何在 Java 中使用 querySelectorAll 按类选择元素 +url: /zh/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 querySelectorAll 按类选择元素 + +如果您需要在 Java 中处理 HTML 文件时**按类选择元素**,本指南将准确展示如何操作。您将学习如何从文件读取 HTML,使用 `querySelectorAll` 查找外部链接,并安全地遍历得到的 `NodeList`。 + +在 Java 中处理 HTML 往往感觉笨重,但现代库提供了简洁的基于 CSS 选择器的 API。下面的示例使用 **jsoup**(版本 1.17.2),因为它实现了 `querySelectorAll` 风格的选择器,并返回类似 `NodeList` 的 `Elements` 集合。您可以根据需要将相同逻辑迁移到其他 DOM 实现。 + +## 前置条件 + +在开始之前,请确保您具备: + +* 已安装 JDK 17 或更高版本。 +* 用于依赖管理的 Maven 或 Gradle。 +* 对 Java 流和 DOM 模型有基本了解。 + +将 jsoup 添加到项目中: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## 步骤 1:从文件读取 HTML + +第一步是从磁盘加载 HTML 文档。`Jsoup.parse(Path, Charset)` 读取文件并构建可供查询的 DOM 树。 + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*为什么这很重要*:一次性加载文件可避免在后续遍历元素时重复 I/O。`Document` 对象保存完整的 DOM,能够快速执行选择器查询。 + +## 步骤 2:使用 `querySelectorAll` 按类选择元素 + +现在文档已在内存中,您可以使用 CSS 选择器**按类选择元素**。选择器 `"a.external"` 匹配带有 `external` 类的 `` 标签——正是您需要的**查找外部链接**方式。 + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*为什么这很重要*:使用类选择器既直观又高效。库会将选择器转换为优化的遍历,实现无需手动遍历每个节点。 + +## 步骤 3:在 Java 中遍历 NodeList(Elements) + +`Elements` 实现了 `Iterable`,因此您可以使用标准的 `for‑each` 循环**遍历 NodeList Java**对象。下面的循环会打印每个链接的 `href` 属性。 + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*为什么这很重要*:直接遍历保持代码可读性,并在仅需简单输出时避免将集合转换为流的开销。 + +## 完整可运行示例 + +将上述三步组合起来即可得到一个可独立运行的程序,您可以在命令行执行。 + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### 预期输出 + +假设 `input.html` 包含: + +```html +Example +About +OpenAI +``` + +运行程序后输出: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## 专业技巧与常见陷阱 + +* **编码很重要** – 始终使用 UTF‑8(或与源文件匹配的字符集)读取文件。错误的编码会导致属性值中的字符损坏。 +* **多个类** – 如果元素拥有多个类(例如 `class="btn external"`),选择器 `"a.external"` 仍然匹配,因为 CSS 类选择器检查的是 token 是否存在,而不是完整字符串。 +* **性能提示** – 若仅需 `href` 属性,可直接使用 `doc.select("a.external[href]").eachAttr("href")` 获取。这避免为每个匹配创建完整的 `Element` 对象。 +* **空值安全** – `link.attr("href")` 在属性缺失时返回空字符串,因此在打印前无需进行 null 检查。 + +## 常见问题 + +**问:这在缺少 `` 根元素的 HTML 片段上是否有效?** +答:是的。`Jsoup.parse` 会将输入视为片段并自动添加缺失的根元素,使选择器能够在片段的 body 上工作。 + +**问:可以在不使用 jsoup 的情况下使用 `querySelectorAll` 吗?** +答:标准的 Java DOM API(`org.w3c.dom`)不包含 `querySelectorAll`。**HTMLUnit** 或 **jodd-lagarto** 等库提供类似方法。这里展示的模式——加载、使用 CSS 选择、遍历——保持不变。 + +**问:如果我需要修改链接而不是仅打印它们怎么办?** +答:获取每个 `Element` 后,您可以调用 `link.attr("href", "newUrl")`,随后使用 `Files.writeString` 将文档写回磁盘。 + +## 结论 + +现在您已经掌握了如何使用 `querySelectorAll`‑风格的选择器**按类选择元素**、**从文件读取 HTML**、**查找外部链接**以及**在 Java 中遍历 NodeList**。完整示例展示了一个简洁、可用于生产环境的工作流,您可以将其嵌入更大的爬取或转换流水线中。 + +接下来,您可以探索相关主题,例如 **使用 HTMLUnit 解析动态内容**、**将修改后的 HTML 写回磁盘**,或 **使用 Java 流将链接 URL 收集到列表**。这些都基于本文演示的基于类的选择核心技术。祝编码愉快! + +## 接下来您可以学习什么? + +以下教程涵盖与本指南技术密切相关的主题。每个资源都包含完整的可运行代码示例和逐步说明,帮助您掌握更多 API 功能并在项目中探索替代实现方案。 + +- [如何在 Java 中查询 HTML – 选择元素、按属性过滤并获取文本](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [遍历 NodeList Java – 读取 HTML 并获取 Image src](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [在 Aspose.HTML for Java 中从文件加载 HTML 文档](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/java/css-html-form-editing/_index.md b/html/chinese/java/css-html-form-editing/_index.md index cac26f4277..fdb8aadb6d 100644 --- a/html/chinese/java/css-html-form-editing/_index.md +++ b/html/chinese/java/css-html-form-editing/_index.md @@ -39,6 +39,8 @@ url: /zh/java/css-html-form-editing/ 本指南详细演示如何在 Java 中使用 Aspose.HTML 按 CSS 类选择元素,实现精准元素定位和操作。 ### [如何在 Java 中读取 CSS – Aspose.HTML 完整指南](./how-to-read-css-in-java-complete-guide-with-aspose-html/) 本指南详细说明如何使用 Aspose.HTML 在 Java 中读取和解析 CSS 文件,实现样式信息的提取。 +### [如何在 Java 中从 HTML 读取 CSS – Aspose.HTML 完整指南](./how-to-read-css-from-html-with-aspose-html-in-java/) +本指南详细说明如何使用 Aspose.HTML 在 Java 中从 HTML 文档中读取 CSS,实现样式提取。 ### [使用 Aspose.HTML for Java 解析 HTML:提取 CSS 属性并获取字体大小](./parse-html-with-java-extract-css-property-and-get-font-size/) 学习如何使用 Aspose.HTML for Java 解析 HTML,提取 CSS 属性并获取字体大小,实现精准的样式分析。 ### [如何在 Java 中查询 HTML – 加载 HTML、CSS 选择器并提取标题](./how-to-query-html-in-java-load-html-css-selector-and-extract/) diff --git a/html/chinese/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/chinese/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..15cbd8d735 --- /dev/null +++ b/html/chinese/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,274 @@ +--- +category: general +date: 2026-09-29 +description: 如何使用 Aspose.HTML for Java 从 HTML 中读取 CSS。学习按 ID 选择元素、获取计算样式、提取 CSS 属性并显示背景颜色。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: zh +lastmod: 2026-09-29 +og_description: 如何使用 Aspose.HTML for Java 从 HTML 中读取 CSS。一步一步的说明,选择 ID 元素、获取计算样式、提取 + CSS 并显示背景颜色。 +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: 如何使用 Aspose.HTML 从 HTML 读取 CSS – Java 指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: 如何在 Java 中使用 Aspose.HTML 从 HTML 读取 CSS +url: /zh/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 Aspose.HTML 从 HTML 读取 CSS + +如果您需要在 Java 应用程序中 **how to read css** 从 HTML 文件中获取,这篇指南将为您提供完整的步骤。阅读完前两句话后,您将了解如何通过 id 选择元素、获取计算样式以及显示背景颜色——全部使用 Aspose.HTML。 + +我们将演示如何加载 HTML 文档、定位特定元素、提取其计算后的 CSS 并打印 background‑color 值。除了 Aspose.HTML for Java 库外,无需任何外部工具,代码兼容 Java 8+。 + +## 您将学习 + +* 使用 Aspose.HTML 从 HTML 文档读取 CSS。 +* 使用 `querySelector` **select element by id**。 +* 对任意 DOM 节点 **get computed style**。 +* **extract CSS from HTML** 并读取各个属性,例如 **display background color**。 +* 常见陷阱以及可靠 CSS 提取的最佳实践技巧。 + +### 前置条件 + +* 已安装 Java 8 或更高版本。 +* 使用 Maven 或 Gradle 管理 Aspose.HTML 依赖。 +* 一个简单的 HTML 文件(例如 `input.html`),其中包含您想要检查的带有 `id` 属性的元素。 + +--- + +## 步骤 1:加载 HTML 文档(how to read css) + +在任何 CSS‑reading 工作流中,第一步都是加载源 HTML。Aspose.HTML 提供 `HTMLDocument` 类来解析文件并构建可供查询的 DOM。 + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Why this matters:** 加载文档会创建完整的 DOM,使得样式计算可靠且与浏览器生成的结果相匹配。跳过此步骤将只能得到原始文本,而不是结构化的文档。 + +--- + +## 步骤 2:通过 id 选择元素 + +要为特定节点提取 CSS,首先需要获取该节点的引用。`querySelector` 方法接受任意 CSS 选择器,非常适合通过 ID 进行选择。 + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Why use `querySelector`?:** 它遵循您在 CSS 中使用的相同选择器语法,因此可以直接复用熟悉的模式,如 `#myDiv`、`.className` 或属性选择器,而无需额外的解析逻辑。 + +--- + +## 步骤 3:获取元素的计算样式 + +获取元素后,Aspose.HTML 可以计算 **computed style**——即在所有 CSS 规则、继承和默认值应用后的最终值。 + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Why compute the style?:** 计算样式反映了浏览器实际渲染的值,而不仅仅是原始声明。当您需要了解实际的 `background-color`、`font-size` 或其他属性时,这一点至关重要。 + +--- + +## 步骤 4:提取 CSS 属性并显示背景颜色 + +现在您已经拥有 `StyleDeclaration`,可以读取任意 CSS 属性。本例聚焦于 **display background color**,但相同的方法同样适用于 `font-size`、`margin` 等。 + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**预期输出** + +``` +Background color: rgb(255, 0, 0) +``` + +如果元素的背景颜色是从父元素或样式表继承的,计算值已经包含了该继承。 + +--- + +## 处理边缘情况和变体 + +### 未找到元素 +如果 `querySelector` 返回 `null`,上述代码已经会打印错误并退出。在生产环境中,您可能希望抛出自定义异常或回退到默认元素。 + +### 多个具有相同 ID 的元素(无效 HTML) +尽管 ID 应该是唯一的,错误的 HTML 可能包含重复。`querySelector` 返回第一个匹配项。若要处理所有匹配项,可使用 `querySelectorAll` 并遍历返回的 `NodeList`。 + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### 不同的 CSS 属性 +要 **extract css from html** 超出背景颜色的其他属性,只需在 `StyleDeclaration` 上调用相应的 getter。常用的 getter 包括: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +如果属性未显式设置,getter 将返回计算后的默认值(例如 `
` 的 `display: block`)。 + +### 浏览器特定前缀 +Aspose.HTML 会在可能的情况下将厂商前缀属性(例如 `-webkit-transform`)规范化为标准等价形式。如果您需要原始值,可以直接查询 `StyleDeclaration` 的映射: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +--- + +## 完整可运行示例 + +下面是一个独立的 Java 类,整合了所有步骤。请将 `YOUR_DIRECTORY/input.html` 替换为您的 HTML 文件路径。 + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**运行程序** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +您应该会在控制台看到打印的背景颜色,确认您已成功 **how to read css**、**select element by id**、**get computed style** 和 **display background color**。 + +--- + +## 最佳实践技巧(专业提示) + +* **Cache the `HTMLDocument`** 如果需要从多个元素读取 CSS;反复解析文件会影响性能。 +* **Validate the HTML** 在加载前进行验证——错误的标记可能导致节点缺失或计算值不正确。 +* **Use try‑with‑resources**(或显式 `dispose`)以释放 Aspose.HTML 对象占用的本机资源。 +* **Log the full `StyleDeclaration`** 在调试复杂样式时使用:`System.out.println(computedStyle.getCssText());` 可获取每个计算属性的快照。 + +--- + +## 结论 + +现在,您已经掌握了使用 Aspose.HTML 在 Java 中从 HTML 文件 **how to read CSS** 的方法。通过加载文档、**selecting element by id**、**getting computed style** 和 **extracting the background‑color** 属性,您可以以编程方式检查浏览器会应用的任何样式信息。 + +接下来,您可以扩展此方案以提取其他 CSS 属性、处理多个元素,或将数据集成到 UI 测试框架中。 + +祝编码愉快,欢迎尝试不同的选择器和样式属性,以满足项目需求! + +## 接下来您应该学习什么? + +以下教程涵盖与本指南技术密切相关的主题,帮助您进一步学习。每个资源都包含完整的可运行代码示例和逐步说明,帮助您掌握更多 API 功能并在项目中探索替代实现方案。 + +- [如何在 Java 中获取 CSS – 使用 Aspose.HTML 检索计算样式](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [如何在 Java 中读取 CSS – Aspose.HTML 完整指南](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [获取计算样式 Java – 从 HTML 中提取背景颜色](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/chinese/java/editing-html-documents/_index.md b/html/chinese/java/editing-html-documents/_index.md index bccb1e0036..d0a1171703 100644 --- a/html/chinese/java/editing-html-documents/_index.md +++ b/html/chinese/java/editing-html-documents/_index.md @@ -56,6 +56,8 @@ url: /zh/java/editing-html-documents/ 掌握使用 Aspose.HTML for Java 编辑外部 CSS 的技巧。这份详细的分步指南将指导您创建动态、样式化的 HTML 文档。 ### [在 Aspose.HTML for Java 中将内联 CSS 添加到 HTML 文档](./add-inline-css-html-documents/) 了解如何使用 Aspose.HTML for Java 将内联 CSS 添加到 HTML 文档。本分步指南可帮助您轻松设置 HTML 样式并将其转换为 PDF。 +### [如何使用 Java 更改 JavaScript 背景颜色](./how-to-change-background-color-javascript-using-java/) +了解如何使用 Java 在 Aspose.HTML for Java 中通过 JavaScript 更改背景颜色的完整步骤。 ### [在 Aspose.HTML for Java 中管理内部和外部 HTML 属性](./manage-inner-outer-html-properties/) 通过本分步指南学习如何管理 Aspose.HTML for Java 中的内部和外部 HTML 属性,非常适合 Web 开发人员和内容创建者。 ### [使用 Aspose.HTML for Java 在 HTML 文档中实现内部 CSS](./implement-internal-css-html-documents/) diff --git a/html/chinese/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/chinese/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..b0f4bf4678 --- /dev/null +++ b/html/chinese/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,244 @@ +--- +category: general +date: 2026-09-29 +description: 使用 Java 在 HTML 文件中更改背景颜色的 JavaScript。学习在 Java 中加载 HTML、在 HTML 中运行 JS,并使用 + Java 修改 HTML 以实现新页面背景。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: zh +lastmod: 2026-09-29 +og_description: 使用 Java 在 HTML 页面中更改背景颜色的 JavaScript。本教程展示了如何在 Java 中加载 HTML、在 HTML + 中运行 JS,以及以编程方式设置页面背景。 +og_image_alt: Screenshot of Java code that changes the page background color +og_title: 使用 Java 更改 JavaScript 背景颜色 – 步骤指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: 如何使用 Java 更改 JavaScript 背景颜色 +url: /zh/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何使用 Java 更改背景颜色(javascript) + +如果您需要在现有的 HTML 文件中 **change background color javascript**,可以完全在 Java 中完成,而无需打开浏览器。本教程向您展示如何 **load html in java**,执行一小段 JavaScript 代码,然后 **modify html with java**,以更新页面的背景。 + +该解决方案使用开源的 **HTMLUnit** 库,它提供了一个无头浏览器,能够像真实浏览器一样评估 JavaScript。阅读完本指南后,您将拥有一个可复用的方法,能够 **sets page background** 为任意您选择的颜色。 + +## 前置条件 + +| 您需要的内容 | 为什么重要 | +|---------------|----------------| +| Java 8 或更高版本 | HTMLUnit 至少需要 Java 8。 | +| Maven 或 Gradle 构建工具 | 自动获取 HTMLUnit 依赖。 | +| 您想编辑的 HTML 文件(例如 `input.html`) | 将被加载并修改的源文档。 | + +将 HTMLUnit 添加到您的项目中: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **专业提示:** 使用最新的稳定版 HTMLUnit,以获得最准确的 JavaScript 引擎。 + +## 更改背景颜色(javascript)– 在 Java 中加载 HTML + +第一步是将 HTML 文档加载到 `HTMLPage` 对象中。这为您提供类似 DOM 的 API 和 JavaScript 执行上下文。 + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*为什么重要*:`WebClient` 创建了一个沙盒环境,JavaScript 可以在其中运行,因此您可以 **run js in html**,完全像用户的浏览器一样。 + +## 在 html 中运行 js 以设置页面背景 + +页面加载后,您可以评估任意 JavaScript 表达式。下面的代码片段会更改 `` 元素的 `backgroundColor` 样式。 + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*解释*: +- `document.body.style.backgroundColor` 是页面背景的标准 DOM 属性。 +- 通过调用 `eval`,我们 **run js in html**,无需真实的浏览器窗口。 +- 该方法可复用于任何颜色,满足 **set page background** 的需求。 + +## 使用 Java 修改 html 并保存结果 + +脚本运行后,DOM 会反映新的样式。您现在可以将更新后的 HTML 写回磁盘。 + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +将所有内容组合在一起,即可得到一个可运行的完整程序: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### 预期输出 + +运行程序会输出: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +在任意浏览器中打开 `js_modified.html`,页面会显示淡蓝色背景,确认 **change background color javascript** 操作成功。 + +## 常见变体和边缘情况 + +| 情况 | 处理方式 | +|-----------|------------------| +| **不同的颜色格式** | 传入任意 CSS 兼容的值(`"red"`、`"#ff0000"`、`"rgb(255,0,0)"`)。 | +| **缺少 `` 标签** | 脚本会静默失败;您可以先使用 `page.getFirstByXPath("//body")` 确保 `` 存在。 | +| **大型 HTML 文件** | 禁用 CSS(`setCssEnabled(false)`),仅启用所需的 JavaScript 功能,以降低内存使用。 | +| **运行多个脚本** | 反复调用 `changeBackground`,或创建接受 JavaScript 命令列表的实用方法。 | + +## 结论 + +现在,您已经了解如何通过在 Java 中加载 HTML 文件来 **change background color javascript**,**run js in html**,以及 **modify html with java**,从而 **set page background** 为任意您选择的颜色。上述完整示例使用最新的 HTMLUnit 库,可集成到更大的自动化流水线中,例如批量处理 HTML 报告或准备电子邮件模板。 + +**下一步** +- 探索其他 DOM 操作(例如,插入元素、移除脚本)。 +- 将此方法与 PDF 渲染器结合,以生成带样式页面的 PDF。 +- 如果需要完整的浏览器兼容性,可尝试使用 Selenium WebDriver 等其他无头引擎。 + +祝编码愉快! + +## 接下来您应该学习什么? + +以下教程涵盖与本指南紧密相关的主题,基于所示技术进行扩展。每个资源都包含完整的可运行代码示例和逐步解释,帮助您掌握更多 API 功能并在项目中探索替代实现方案。 + +- [获取计算样式 Java – 从 HTML 中提取背景颜色](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [如何加载 HTML、设置设备 DPI 并读取背景颜色](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [在 Java 中从 JavaScript 生成 HTML – 完整分步指南](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/java/configuring-environment/_index.md b/html/czech/java/configuring-environment/_index.md index e7adeaae1e..b47673a7a1 100644 --- a/html/czech/java/configuring-environment/_index.md +++ b/html/czech/java/configuring-environment/_index.md @@ -116,6 +116,9 @@ Naučte se, jak konfigurovat Runtime Service v Aspose.HTML pro Java pro optimali ### [Implementujte sandboxing v Aspose.HTML pro Java](./implement-sandboxing/) Naučte se, jak implementovat sandboxing v Aspose.HTML pro Java pro bezpečné řízení vykonávání skriptů ve vašich HTML dokumentech a jejich konverzi do PDF. +### [Nastavte vlastní uživatelský agent a rozměry obrazovky v Aspose.HTML pro Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Naučte se, jak nastavit vlastní User-Agent a velikost obrazovky při konverzi HTML v Aspose.HTML pro Java. + ### [Vytvořte Aspose HTML Sandbox – Kompletní průvodce pro Javu](./create-aspose-html-sandbox-complete-java-guide/) ### [Nastavte uživatelský stylový list v Aspose.HTML pro Java](./set-user-style-sheet/) diff --git a/html/czech/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/czech/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..ea5dca7ef4 --- /dev/null +++ b/html/czech/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,192 @@ +--- +category: general +date: 2026-09-29 +description: Nastavte vlastní uživatelský agent v Aspose.HTML pro Javu a naučte se, + jak nastavit virtuální velikost obrazovky pro přesné vykreslování HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: cs +lastmod: 2026-09-29 +og_description: Nastavte vlastní uživatelský agent v Aspose.HTML pro Javu a zjistěte, + jak nastavit virtuální velikost obrazovky pro přesné vykreslování HTML. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Nastavte vlastní uživatelský agent a rozměry obrazovky v Aspose.HTML pro + Javu +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Nastavte vlastní uživatelský agent a rozměry obrazovky v Aspose.HTML pro Javu +url: /cs/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Nastavení vlastního uživatelského agenta a rozměrů obrazovky v Aspose.HTML pro Java + +Pokud potřebujete **nastavit vlastní uživatelský agent** při renderování HTML pomocí Aspose.HTML pro Java, tento návod vám přesně ukáže, jak na to. Konfigurací sandboxu získáte také možnost **nastavit virtuální velikost obrazovky**, což zajistí, že rozvržení odpovídá skutečnému viewportu prohlížeče. + +Na konci tohoto tutoriálu budete mít kompletní spustitelný program, který **určuje uživatelský agent**, **nastavuje šířku obrazovky** a **nastavuje výšku obrazovky**. Nejsou potřeba žádné externí nástroje – stačí Aspose.HTML pro Java a runtime Java 8+. + +## Co se naučíte + +* Jak vytvořit `SandboxConfiguration` pro izolaci renderování. +* Jak **nastavit vlastní uživatelský agent** a proč je to důležité pro responzivní stránky. +* Jak **nastavit virtuální velikost obrazovky** (šířka a výška) pro přesné rozvržení. +* Jak načíst HTML soubor v sandboxu a uložit zpracovaný výsledek. +* Běžné úskalí a tipy na osvědčené postupy pro sandboxové renderování. + +> **Požadavky** – Potřebujete platnou licenci Aspose.HTML pro Java, Java 8 nebo novější a IDE (IntelliJ IDEA, Eclipse nebo VS Code). Příklad používá lokální soubor `input.html`, ale funguje jakýkoli přístupný URL. + +![Diagram toku sandboxu](sandbox-flow.png "příklad nastavení vlastního uživatelského agenta v Javě") + +## Krok 1: Vytvoření konfigurace sandboxu (základ) + +Sandbox izoluje renderovací prostředí od hostitelské JVM, což je nezbytné, když chcete **nastavit vlastní uživatelský agent** nebo změnit velikost viewportu. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Proč je tento krok důležitý?* +`SandboxConfiguration` obsahuje všechna nastavení renderování, včetně **rozměrů obrazovky** a řetězců **user‑agent**. Konfigurací před načtením dokumentu zajistíte, že HTML engine bude respektovat tato nastavení již od první žádosti. + +## Krok 2: Nastavení rozměrů obrazovky tak, aby napodobovaly skutečné zařízení + +Responzivní stránky často čtou `window.innerWidth` a `window.innerHeight`. Aby engine „myslel“, že běží na obrazovce 1024 × 768, **nastavíte virtuální velikost obrazovky**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Proč je to důležité* – Pokud vynecháte **nastavení rozměrů obrazovky**, renderer může použít výchozí malý viewport, což způsobí, že CSS media queries zvolí mobilní rozvržení. Explicitním **nastavením šířky obrazovky** a **výšky obrazovky** řídíte, které CSS pravidla se použijí. + +## Krok 3: Specifikace vlastního řetězce user‑agent + +Některé webové stránky poskytují odlišný obsah na základě hlavičky user‑agent. Pro **specifikaci uživatelského agenta** jej jednoduše nastavíte v konfiguraci sandboxu: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Proč použít vlastní user agent?* +Vlastní řetězec může obejít detekci botů, spustit funkce určené jen pro desktop nebo otestovat, jak se stránka chová pro konkrétní verzi prohlížeče. Aspose engine předává tuto hodnotu s každým HTTP požadavkem při načítání externích zdrojů (CSS, obrázky, skripty). + +## Krok 4: Načtení HTML dokumentu uvnitř sandboxu + +Jakmile je sandbox plně nakonfigurován, načtěte HTML soubor. Konstruktor, který přijímá cestu k souboru a `SandboxConfiguration`, automaticky použije všechna nastavení, která jsme definovali. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +Pokud potřebujete načíst ze vzdáleného URL, nahraďte cestu k souboru řetězcem URL – Aspose.HTML i nadále bude respektovat **nastavený vlastní user agent** a **rozměry obrazovky**. + +## Krok 5: Uložení zpracovaného výstupu + +Po dokončení načítání dokumentu jej můžete uložit v libovolném podporovaném formátu. Zde zapisujeme sandboxovaný HTML soubor, který odráží všechny změny DOM způsobené vlastními nastaveními. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +Uložený soubor bude obsahovat stejný markup, ale všechny skripty, které dotazovaly `navigator.userAgent` nebo kontrolovaly `window.innerWidth`, nyní uvidí hodnoty, které jste zadali. + +## Kompletní, spustitelný příklad + +Spojením všech kroků dohromady získáte samostatný program, který můžete zkopírovat, vložit a spustit. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Očekávaný výstup + +Spuštěním programu se vytvoří `sandboxed_output.html`. Pokud jej otevřete v prohlížeči a v konzoli zkontrolujete `navigator.userAgent`, uvidíte **AsposeHTML/1.0**. Stejně tak `window.innerWidth` zobrazí **1024**, což potvrzuje, že **nastavení rozměrů obrazovky** fungovalo podle očekávání. + +## Časté otázky a řešení okrajových případů + +| Otázka | Odpověď | +|----------|--------| +| **Co když stránka načítá další zdroje z jiné domény?** | Sandbox předává **vlastní user agent** s každým požadavkem, ale zásady cross‑origin stále platí. Použijte `sandboxConfig.setAllowCrossDomain(true)`, pokud potřebujete tyto omezení uvolnit. | +| **Mohu změnit velikost obrazovky po načtení dokumentu?** | Ne. Rozměry obrazovky jsou načteny během počátečního průchodu layoutem. Pro renderování s jinou velikostí vytvořte novou `SandboxConfiguration` a dokument načtěte znovu. | +| **Musím volat `document.close()`?** | `HTMLDocument` implementuje `AutoCloseable`. Použití bloku try‑with‑resources zajišťuje řádné uvolnění prostředků, ale explicitní volání `close()` je v jednoduchých skriptech volitelné. | +| **Jak se to liší od nastavení user‑agentu v HTTP klientovi?** | Nastavení user‑agentu v sandboxu ovlivňuje **všechny** požadavky na zdroje prováděné HTML engine, ne jen počáteční načtení HTML. To napodobuje skutečný prohlížeč přesněji. | +| **Je sandbox bezpečný pro nedůvěryhodné HTML?** | Ano. Sandbox izoluje přístup k souborovému systému a omezuje síťová volání podle konfigurace, čímž snižuje riziko, že škodlivé skripty ovlivní vaši hostitelskou JVM. | + +## Pro tipy + +* **Znovupoužití konfigurací** – Pokud renderujete mnoho stránek se stejným viewportem, vytvořte jednu `SandboxConfiguration` a znovu ji použijte, abyste se vyhnuli režii při vytváření objektů. +* **Ladění pomocí logování** – Povolením logování Aspose.HTML (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) můžete vidět, které zdroje byly načteny s vlastním user‑agentem. +* **Kombinace s CSS media queries** – Úpravou **nastavení šířky obrazovky** můžete testovat, jak se vaše responzivní design chová na tabletech, telefonech nebo velkých desktopech, aniž byste otevírali skutečný prohlížeč. + +## Závěr + +Nyní víte, jak **nastavit vlastní uživatelský agent** a **nastavit rozměry obrazovky** při renderování HTML pomocí Aspose.HTML pro Java. Konfigurací sandboxu izolujete prostředí, řídíte viewport a zajistíte, že externí zdroje uvidí přesně hlavičky, které určíte. Tato technika je nezbytná pro testování responzivních rozvržení, obcházení blokování botů nebo reprodukci funkcí určených jen pro desktop v automatizovaných pipelinech. + +Dále můžete prozkoumat **jak nastavit vlastní cookies** nebo **zachytit renderované screenshoty** pomocí renderovacího API Aspose.HTML – oba koncepty staví na stejném vzoru konfigurace sandboxu, který jste právě zvládli. + +Šťastné kódování! + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto návodu. Každý zdroj obsahuje kompletní funkční příklady kódu s podrobnými vysvětleními, které vám pomohou zvládnout další funkce API a prozkoumat alternativní přístupy k implementaci ve vašich projektech. + +- [Vysoké DPI renderování v Javě – Zachycení screenshotů webových stránek s vlastním uživatelským agentem](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [Jak načíst HTML, nastavit DPI zařízení a přečíst barvu pozadí](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Vytvoření HTML souboru v Javě a nastavení síťové služby (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/java/creating-managing-html-documents/_index.md b/html/czech/java/creating-managing-html-documents/_index.md index 134ef820ab..f9eae4179b 100644 --- a/html/czech/java/creating-managing-html-documents/_index.md +++ b/html/czech/java/creating-managing-html-documents/_index.md @@ -58,6 +58,8 @@ V tomto podrobném průvodci se dozvíte, jak načítat, manipulovat a ukládat Naučte se načítat HTML dokumenty ze streamů pomocí Aspose.HTML for Java. Tato příručka poskytuje podrobný návod pro bezproblémovou manipulaci s HTML. ### [Vytvořte HTML dokumenty z String v Aspose.HTML pro Java](./create-html-documents-from-string/) Naučte se vytvářet HTML dokumenty z řetězců v Aspose.HTML pro Java pomocí tohoto podrobného průvodce. +### [Jak vytvořit HTML prvek v Javě pomocí Aspose.HTML](./how-to-create-html-element-in-java-using-aspose-html/) +Naučte se vytvářet HTML elementy v Javě s Aspose.HTML pomocí praktického průvodce. ### [Vytvořte HTML dokument v Javě – načtěte JSON a generujte obsah](./create-html-document-with-java-fetch-json-and-generate-conte/) Naučte se v Javě načíst JSON a generovat dynamický HTML obsah pomocí Aspose.HTML. ### [Načtěte HTML dokumenty z URL v Aspose.HTML pro Java](./load-html-documents-from-url/) @@ -74,10 +76,14 @@ Naučte se, jak vytvořit sandboxové prostředí pro bezpečnou manipulaci s HT Naučte se vytvářet a spravovat dokumenty SVG pomocí Aspose.HTML pro Javu! Tento komplexní průvodce pokrývá vše od základní tvorby až po pokročilou manipulaci. ### [Jak dotazovat HTML v Javě – Kompletní tutoriál](./how-to-query-html-in-java-complete-tutorial/) Kompletní průvodce, jak v Javě dotazovat a získávat data z HTML pomocí Aspose.HTML, včetně příkladů a tipů. +### [Jak vybrat prvky podle třídy v Javě pomocí querySelectorAll](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Naučte se vybrat HTML prvky podle třídy v Javě pomocí querySelectorAll v Aspose.HTML. ### [Jak parsovat HTML v Javě – načíst, dotazovat a počítat prvky](./how-to-parse-html-java-load-query-count-elements/) Naučte se načíst HTML, dotazovat jej a počítat elementy v Javě pomocí Aspose.HTML v tomto podrobném průvodci. ### [Načtení HTML dokumentu v Javě – Kompletní průvodce s XPath a CSS](./load-html-document-java-complete-guide-with-xpath-css/) Kompletní návod, jak načíst HTML dokument v Javě pomocí Aspose.HTML, včetně použití XPath a CSS selektorů. +### [Jak počítat HTML elementy v Javě pomocí XPath](./how-to-count-html-elements-in-java-with-xpath/) +Naučte se pomocí XPath v Aspose.HTML pro Java počítat počet HTML elementů v dokumentu. ### [Počítání znaků HTML v Javě – Kompletní průvodce s Aspose HTML](./count-html-characters-in-java-full-guide-with-aspose-html/) Naučte se, jak pomocí Aspose.HTML v Javě spočítat počet znaků v HTML dokumentu, včetně praktických příkladů a tipů. ### [Extrahujte text z HTML v Javě – Kompletní programovací průvodce](./extract-text-from-html-in-java-complete-programming-guide/) @@ -101,4 +107,4 @@ Kompletní návod, jak pomocí Aspose.HTML pro Java extrahovat text z HTML dokum {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/czech/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..6647e75302 --- /dev/null +++ b/html/czech/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-09-29 +description: Naučte se počítat HTML elementy v Javě pomocí Aspose.HTML a XPath. Tento + průvodce ukazuje, jak načíst HTML dokument, vybrat uzly pomocí XPath a získat seznam + uzlů. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: cs +lastmod: 2026-09-29 +og_description: Jak počítat HTML elementy v Javě pomocí Aspose.HTML. Sledujte tento + kompletní tutoriál, jak načíst HTML dokument, vybrat uzly pomocí XPath, vyhodnotit + XPath v Javě a získat seznam uzlů. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: Jak spočítat HTML elementy v Javě – krok za krokem průvodce +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: Jak spočítat HTML elementy v Javě pomocí XPath +url: /cs/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak počítat HTML elementy v Javě pomocí XPath + +Pokud potřebujete **how to count HTML elements** na webové stránce z Java aplikace, tento průvodce vám poskytne kompletní, připravené řešení. Po přečtení prvních dvou vět přesně víte, jak načíst HTML dokument, **select nodes with XPath** a získat seznam uzlů, který můžete spočítat. + +Použijeme knihovnu Aspose.HTML pro Java, protože poskytuje DOM‑kompatibilní API a výkonný XPath engine. Tutoriál pokrývá vše, co potřebujete — importy, kód, vysvětlení a očekávaný výstup — takže můžete příklad zkopírovat do svého projektu a okamžitě vidět výsledky. Během čtení se také dotkneme **select nodes with XPath**, **get node list Java**, **load HTML document Java** a **evaluate XPath in Java**. + +## Co dosáhnete + +* Načtete HTML soubor ze souborového systému. +* Vytvoříte XPath výraz, který cílí na konkrétní elementy. +* Vyhodnotíte XPath výraz vůči dokumentu. +* Získáte `NodeList` a spočítáte, kolik odpovídajících elementů existuje. + +Nejsou potřeba žádné externí služby ani složitá konfigurace; stačí mít Aspose.HTML JAR na classpathu. + +--- + +## Jak počítat HTML elementy pomocí XPath v Javě + +Tato sekce krok za krokem ukazuje přesný kód, který potřebujete. Každá podkapitola odpovídá logické části procesu, což usnadňuje úpravy nebo rozšíření. + +### Krok 1: Načtení HTML dokumentu v Javě + +Nejprve načtěte HTML soubor do paměti. Třída `HTMLDocument` soubor parsuje a vytvoří DOM strom, který může XPath dotazovat. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Proč je to důležité:** +Načtení dokumentu vytvoří DOM reprezentaci, která je nezbytná pro jakékoli vyhodnocení XPath. Pokud je cesta k souboru špatná, Aspose.HTML vyhodí `FileNotFoundException`, takže zkontrolujte umístění `input.html`. + +### Krok 2: Vytvoření a vyhodnocení XPath výrazu + +Nyní sestavíme XPath, který vybere elementy, jež chceme spočítat. V tomto příkladu počítáme všechny `` tagy, jejichž atribut `alt` má hodnotu `"logo"`. + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Proč je to důležité:** +Výraz `//img[@alt='logo']` je stručný způsob, jak **select nodes with XPath**. Volání `evaluate` **evaluate XPath in Java** vrací obecný `XPathResult`. Přetypování na `NodeList` nám poskytne přímý přístup ke kolekci odpovídajících uzlů. + +### Krok 3: Získání a spočítání seznamu uzlů + +Nakonec spočítáme, kolik uzlů bylo vráceno. API `NodeList` poskytuje metodu `getLength()` právě pro tento účel. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Proč je to důležité:** +`getLength()` je nejjednodušší způsob, jak **get node list Java** a získat počet. Pokud XPath neodpovídá žádným elementům, délka bude `0`, což může vaše aplikace elegantně ošetřit. + +### Kompletní spustitelný příklad + +Níže je celý program, včetně všech importů a minimální metody `main`. Zkopírujte jej do souboru pojmenovaného `CountHtmlElements.java`, přidejte Aspose.HTML JAR do projektu a spusťte. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Očekávaný výstup** + +Pokud `input.html` obsahuje tři `logo` tagy, program vypíše: + +``` +Found 3 logo images. +``` + +Pokud takové obrázky neexistují, vypíše: + +``` +Found 0 logo images. +``` + +--- + +## Běžné varianty a okrajové případy + +| Situace | Co změnit | Důvod | +|-----------|----------------|--------| +| Počítat jiný element (např. `
` s třídou `header`) | Změnit XPath na `//div[@class='header']` | Syntaxe XPath vám umožní cílit na libovolný tag/atribut. | +| Počítat všechny elementy bez ohledu na atribut | Použít `//*` jako XPath výraz | `//*` vybírá každý elementový uzel v dokumentu. | +| Velké dokumenty způsobující tlak na paměť | Použít streamovací parser nebo vyhodnocovat XPath na fragmentu | Aspose.HTML nabízí `HTMLDocumentFragment` pro částečné parsování. | +| Potřebujete skutečné uzly, ne jen počet | Iterovat přes `nodes.item(i)` | Po spočítání můžete každý uzel dále zpracovávat. | + +**Tip:** Vždy předávejte XPath řetězec do `createXPathExpression` po jeho validaci. Neplatný výraz vyvolá `XPathException`, kterou můžete zachytit a zobrazit uživatelsky přívětivou chybovou zprávu. + +--- + +## Kontrolní seznam pro řešení problémů + +1. **Knihovna nenalezena** – Ujistěte se, že Aspose.HTML for Java JAR je na classpathu (`-cp` nebo v závislostech IDE). +2. **Soubor nenalezen** – Ověřte, že `input.html` je umístěn relativně k pracovnímu adresáři nebo použijte absolutní cestu. +3. **Nula výsledků** – Zkontrolujte hodnoty atributů a citlivost na velikost písmen (`alt='logo'` vs `alt='Logo'`). XPath rozlišuje velikost písmen. +4. **Obavy o výkon** – Znovu použijte jedinou instanci `HTMLDocument`, pokud potřebujete spouštět mnoho XPath dotazů na stejný soubor. + +--- + +## Závěr + +Nyní víte, **how to count HTML elements** v Javě pomocí Aspose.HTML a XPath. Načtením HTML dokumentu, vytvořením XPath výrazu, **evaluating XPath in Java** a získáním **node list**, můžete rychle zjistit počet odpovídajících elementů. Tato technika funguje pro jakýkoli tag nebo atribut, což z ní činí univerzální nástroj pro web‑scraping, automatizované testování nebo analýzu obsahu. + +Další kroky, které můžete prozkoumat: + +* Použití **select nodes with XPath** k extrakci hodnot atributů (např. `src` obrázku). +* Kombinování více XPath dotazů pro vytvoření zprávy o statistikách elementů. +* Integrace této logiky do větší Java služby, která zpracovává HTML soubory hromadně. + +Neváhejte experimentovat s různými XPath výrazy a strukturami dokumentů — počítání HTML elementů je jen začátek! + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční ukázky kódu s podrobnými vysvětleními, aby vám pomohl zvládnout další funkce API a prozkoumat alternativní implementační přístupy ve vašich projektech. + +- [How to Parse HTML Java – Load, Query & Count Elements](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Load HTML Document Java – Complete Guide with XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/czech/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..3bac551037 --- /dev/null +++ b/html/czech/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,185 @@ +--- +category: general +date: 2026-09-29 +description: Naučte se, jak vytvořit HTML prvek v Javě, přidat odstavec, nastavit + jeho text a připojit jej k tělu pomocí Aspose.HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: cs +lastmod: 2026-09-29 +og_description: Vytvořte HTML prvek v Javě přidáním odstavce, nastavením jeho textu + a připojením k tělu pomocí Aspose.HTML. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: Vytvořte HTML prvek v Javě – krok za krokem průvodce Aspose.HTML +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: Jak vytvořit HTML prvek v Javě pomocí Aspose.HTML +url: /cs/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak vytvořit HTML element v Javě pomocí Aspose.HTML + +Pokud potřebujete **vytvořit HTML element** v Java aplikaci, tento návod vám ukáže kompletní, spustitelné řešení. Uvidíte, jak **přidat odstavec**, nastavit jeho text a **připojit element k tělu** existujícího HTML souboru pomocí Aspose.HTML. + +Tutoriál pokrývá vše od načtení dokumentu až po uložení upraveného souboru, takže můžete kód zkopírovat do svého projektu bez dalšího výzkumu. + +## Prerequisites + +Než začnete, ujistěte se, že máte: + +* Java 17 nebo novější nainstalovanou. +* Aspose.HTML for Java 23.10 (nebo nejnovější verzi) přidanou do classpath vašeho projektu. +* Jednoduchý soubor `input.html` v známém adresáři. Soubor může být prázdný (``) nebo obsahovat existující značky. + +## Step 1: Load the existing HTML document + +Načtení zdrojového souboru vám poskytne manipulovatelný DOM strom. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +Konstruktor `HTMLDocument` parsuje soubor a vytvoří živý DOM. Pokud soubor nelze přečíst, Aspose.HTML vyhodí `IOException`; můžete nechat výjimku propagovat nebo ji ošetřit pomocí try‑catch bloku. + +## Step 2: Create a new `

` element and add text to HTML + +Vytvoření nového elementu je podobné použití `document.createElement` v prohlížeči. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` automaticky vytvoří textový uzel a připojí jej k elementu, což je doporučený způsob **přidání textu do HTML**. Tato metoda také escapuje znaky, které by mohly narušit značkování. + +## Step 3: Append element to body + +Nyní, když je odstavec připraven, musíte jej umístit do `` dokumentu. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` vrací uzel `` a `appendChild` vloží nový `

` jako poslední dítě. Pokud dokument nemá element `` (což je u dobře vytvořeného HTML souboru nepravděpodobné), Aspose.HTML jej vytvoří automaticky. + +## Step 4: Save the modified document + +Nakonec zapíšete aktualizovaný DOM zpět na disk. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` serializuje DOM, zachovává existující značky a přidává nový odstavec. Výsledný `output.html` bude obsahovat: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Full source code (java html example) + +Spojením všech kroků získáte samostatný program, který můžete okamžitě spustit. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### What the code does + +| Krok | Akce | Proč je to důležité | +|------|------|---------------------| +| Načtení dokumentu | `new HTMLDocument(...)` | Parsuje zdrojové HTML do DOM, který můžete manipulovat. | +| Vytvoření elementu | `doc.createElement("p")` | Odpovídá API prohlížeče a zajišťuje, že element splňuje HTML standardy. | +| Nastavení textu | `setTextContent(...)` | Zaručuje správné escapování a vyhýbá se ručnímu vytváření textových uzlů. | +| Připojení k tělu | `doc.getBody().appendChild(...)` | Umístí nový element tam, kde jej prohlížeče vykreslí. | +| Uložení souboru | `doc.save(...)` | Ukládá změny a vytváří platný HTML soubor připravený k dalšímu použití. | + +## Common variations and edge cases + +* **Přidání více elementů** – opakujte kroky 2‑3 pro každý nový uzel před voláním `save`. +* **Vložení před konkrétní uzel** – použijte `insertBefore(newNode, referenceNode)` místo `appendChild`. +* **Práce s fragmenty** – `doc.createDocumentFragment()` vám umožní vytvořit skupinu uzlů a připojit je jedním operací, což zlepšuje výkon při velkých aktualizacích. +* **Zpracování UTF‑8 znaků** – Aspose.HTML automaticky zapisuje UTF‑8; jen se ujistěte, že váš zdrojový soubor je kódován stejným způsobem. + +## Practical tips + +* **Zpracování cest** – Používejte `java.nio.file.Paths` pro tvorbu platformně nezávislých cest k souborům. +* **Bezpečnost výjimek** – Zabalte celý blok do try‑with‑resources, pokud potřebujete uzavřít další streamy. +* **Výkon** – Pro velmi velké HTML soubory zvažte načtení dokumentu pomocí `HTMLDocument(String, LoadOptions)`, kde můžete vypnout externí zdroje a urychlit parsování. + +## Verify the result + +Po spuštění programu otevřete `output.html` v libovolném prohlížeči. Měli byste vidět odstavec „Added by Aspose.HTML“ zobrazený tam, kde končí původní tělo. Prohlédněte si zdroj stránky a ověřte, že element `

` je přítomen uvnitř ``. + +## Conclusion + +Nyní víte, jak **vytvořit HTML element** v Javě, **přidat odstavec**, **přidat text do HTML** a **připojit element k tělu** pomocí Aspose.HTML. Kompletní **java html example** ukazuje čistý, produkčně připravený workflow, který můžete rozšířit pro manipulaci s libovolnou částí HTML dokumentu. + +Dále prozkoumejte související témata jako **úprava atributů**, **odstraňování uzlů** nebo **práce s CSS styly** pro vytvoření bohatších HTML zpracovatelských pipeline. Šťastné programování! + +## What Should You Learn Next? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční příklady kódu s podrobným vysvětlením krok za krokem, aby vám pomohl zvládnout další funkce API a prozkoumat alternativní implementační přístupy ve vlastních projektech. + +- [Create new html element with Java – Full Aspose.HTML Guide](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [append child to body in Java – Full Aspose.HTML Tutorial](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Append Element to Body with Aspose.HTML for Java using a DOM Mutation Observer](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/czech/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..c9be422505 --- /dev/null +++ b/html/czech/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,251 @@ +--- +category: general +date: 2026-09-29 +description: Naučte se, jak vybírat prvky podle třídy, číst HTML ze souboru a najít + externí odkazy v Javě. Tento krok‑za‑krokem průvodce pokrývá efektivní iteraci NodeListu. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: cs +lastmod: 2026-09-29 +og_description: Vyberte prvky podle třídy v Javě, načtěte HTML ze souboru a najděte + externí odkazy pomocí querySelectorAll. Sledujte celý příklad pro iteraci NodeListu. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Výběr elementů podle třídy v Java – kompletní průvodce s querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: Jak vybrat prvky podle třídy v Javě pomocí querySelectorAll +url: /cs/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak vybrat prvky podle třídy v Javě pomocí querySelectorAll + +Pokud potřebujete **vybrat prvky podle třídy** při zpracování HTML souboru v Javě, tento návod vám přesně ukáže, jak na to. Naučíte se načíst HTML ze souboru, použít `querySelectorAll` k nalezení externích odkazů a bezpečně iterovat výsledný `NodeList`. + +Práce s HTML v Javě často působí těžkopádně, ale moderní knihovny vám poskytují stručné API založené na CSS‑selektorech. Níže uvedený příklad používá **jsoup** (verze 1.17.2), protože implementuje selektory ve stylu `querySelectorAll` a vrací kolekci `Elements`, která se chová jako `NodeList`. Stejnou logiku můžete přizpůsobit i jiným implementacím DOM, pokud je to potřeba. + +## Požadavky + +* Nainstalovaný JDK 17 nebo novější. +* Maven nebo Gradle pro správu závislostí. +* Základní znalost Java streamů a modelu DOM. + +Add jsoup to your project: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## Krok 1: Načtení HTML ze souboru + +Prvním úkolem je načíst HTML dokument z disku. `Jsoup.parse(Path, Charset)` načte soubor a vytvoří DOM strom, který můžete dotazovat. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Proč je to důležité*: Načtení souboru jednou zabraňuje opakovanému I/O při iteraci přes prvky později. Objekt `Document` obsahuje celý DOM, což umožňuje rychlé dotazy pomocí selektorů. + +## Krok 2: Použití `querySelectorAll` k výběru prvků podle třídy + +Jakmile je dokument v paměti, můžete **vybrat prvky podle třídy** pomocí CSS selektoru. Selektor `"a.external"` odpovídá značkám ``, které mají třídu `external` — přesně to, co potřebujete k **nalezení externích odkazů**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Proč je to důležité*: Použití selektoru třídy je jak výmluvné, tak výkonné. Knihovna překládá selektor do optimalizované procházky, takže nemusíte psát ruční smyčky přes každý uzel. + +## Krok 3: Iterace NodeList (Elements) v Javě + +`Elements` implementuje `Iterable`, což znamená, že můžete použít standardní smyčku `for‑each` k **iteraci NodeList v Javě**. Níže uvedená smyčka vypíše atribut `href` každého odkazu. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Proč je to důležité*: Přímá iterace udržuje kód čitelný a vyhýbá se režii převodu kolekce na stream, když potřebujete jen jednoduchý výstup. + +## Kompletní funkční příklad + +Spojením tří kroků získáte samostatný program, který můžete spustit z příkazové řádky. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Očekávaný výstup + +Předpokládejme, že `input.html` obsahuje: + +```html +Example +About +OpenAI +``` + +Spuštěním programu se vypíše: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Profesionální tipy a běžné úskalí + +* **Kódování má význam** – Vždy čtěte soubor s UTF‑8 (nebo s kódováním, které odpovídá vašemu zdroji). Nesprávné kódování může poškodit znaky v hodnotách atributů. +* **Více tříd** – Pokud má prvek několik tříd (např. `class="btn external"`), selektor `"a.external"` stále odpovídá, protože CSS selektory tříd kontrolují přítomnost tokenu, nikoli přesný řetězec. +* **Tip pro výkon** – Pokud potřebujete jen atribut `href`, můžete jej získat přímo pomocí `doc.select("a.external[href]").eachAttr("href")`. Tím se vyhnete vytváření kompletních objektů `Element` pro každou shodu. +* **Bezpečnost proti null** – `link.attr("href")` vrací prázdný řetězec, pokud atribut chybí, takže před výpisem nepotřebujete kontrolu na null. + +## Často kladené otázky + +**Q: Funguje to s HTML fragmenty, které postrádají kořen ``?** +A: Ano. `Jsoup.parse` považuje vstup za fragment a automaticky přidá chybějící kořenové elementy, což umožňuje selektorům fungovat na těle fragmentu. + +**Q: Můžu použít `querySelectorAll` bez jsoup?** +A: Standardní Java DOM API (`org.w3c.dom`) neobsahuje `querySelectorAll`. Knihovny jako **HTMLUnit** nebo **jodd-lagarto** poskytují podobné metody. Vzor zde ukázaný — načtení, výběr pomocí CSS, iterace — zůstává stejný. + +**Q: Co když potřebuji upravit odkazy místo jejich pouhého výpisu?** +A: Po získání každého `Element` můžete zavolat `link.attr("href", "newUrl")` a poté zapsat dokument zpět na disk pomocí `Files.writeString`. + +## Závěr + +Nyní víte, jak **vybrat prvky podle třídy**, **načíst HTML ze souboru**, **najít externí odkazy** a **iterovat NodeList v Javě** pomocí selektorů ve stylu `querySelectorAll`. Kompletní příklad ukazuje čistý, produkčně připravený workflow, který můžete začlenit do větších pipeline pro scraping nebo transformaci. + +Dále prozkoumejte související témata, jako je **parsování dynamického obsahu pomocí HTMLUnit**, **zápis upraveného HTML zpět na disk**, nebo **použití Java streamů k sesbírání URL odkazů do seznamu**. Každé z nich staví na základní technice výběru podle třídy, která je zde demonstrována. Šťastné kódování! + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto návodu. Každý zdroj obsahuje kompletní funkční ukázky kódu s podrobnými vysvětleními, které vám pomohou zvládnout další funkce API a prozkoumat alternativní přístupy k implementaci ve vašich projektech. + +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Iterate NodeList Java – Read HTML & Get Image src](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [Load HTML Documents from File in Aspose.HTML for Java](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/java/css-html-form-editing/_index.md b/html/czech/java/css-html-form-editing/_index.md index bb3244be24..aa9aeef5e6 100644 --- a/html/czech/java/css-html-form-editing/_index.md +++ b/html/czech/java/css-html-form-editing/_index.md @@ -41,6 +41,8 @@ Naučte se, jak pomocí Aspose.HTML v Javě načíst a analyzovat CSS soubory. Naučte se pomocí Aspose.HTML v Javě extrahovat CSS vlastnosti a zjistit velikost písma z HTML dokumentu. ### [Jak dotazovat HTML v Javě – načíst HTML, CSS selektor a extrahovat nadpisy](./how-to-query-html-in-java-load-html-css-selector-and-extract/) Naučte se načíst HTML, použít CSS selektory a získat nadpisy pomocí Aspose.HTML pro Javu. +### [Jak číst CSS z HTML pomocí Aspose.HTML v Javě](./how-to-read-css-from-html-with-aspose-html-in-java/) +Naučte se načíst a analyzovat CSS přímo z HTML souborů pomocí Aspose.HTML v Javě. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/czech/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/czech/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..ff0c10bae7 --- /dev/null +++ b/html/czech/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,266 @@ +--- +category: general +date: 2026-09-29 +description: Jak číst CSS z HTML pomocí Aspose.HTML pro Javu. Naučte se vybrat prvek + podle ID, získat vypočtený styl, extrahovat CSS vlastnosti a zobrazit barvu pozadí. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: cs +lastmod: 2026-09-29 +og_description: Jak číst CSS z HTML pomocí Aspose.HTML pro Java. Krok za krokem instrukce + pro výběr elementu podle ID, získání vypočteného stylu, extrakci CSS a zobrazení + barvy pozadí. +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: Jak číst CSS z HTML pomocí Aspose.HTML – Java průvodce +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: Jak načíst CSS z HTML pomocí Aspose.HTML v Javě +url: /cs/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak číst CSS z HTML pomocí Aspose.HTML v Javě + +Pokud potřebujete **jak číst css** z HTML souboru v Java aplikaci, tento průvodce vám přesně ukáže, jak na to. Na konci prvních dvou vět budete vědět, jak vybrat prvek podle id, získat vypočtený styl a zobrazit barvu pozadí — vše s Aspose.HTML. + +Provedeme vás načítáním HTML dokumentu, vyhledáním konkrétního prvku, extrahováním jeho vypočteného CSS a vytištěním hodnoty background‑color. Kromě knihovny Aspose.HTML pro Java nejsou potřeba žádné externí nástroje a kód funguje s Java 8+. + +## Co se naučíte + +* Jak číst CSS z HTML dokumentu pomocí Aspose.HTML. +* Jak **vybrat prvek podle id** pomocí `querySelector`. +* Jak **získat vypočtený styl** pro libovolný DOM uzel. +* Jak **extrahovat CSS z HTML** a číst jednotlivé vlastnosti, jako je **zobrazení barvy pozadí**. +* Běžné úskalí a tipy na nejlepší postupy pro spolehlivé extrahování CSS. + +### Předpoklady + +* Nainstalovaná Java 8 nebo novější. +* Maven nebo Gradle pro správu závislosti Aspose.HTML. +* Jednoduchý HTML soubor (např. `input.html`), který obsahuje prvek s atributem `id`, který chcete prozkoumat. + +--- + +## Krok 1: Načtení HTML dokumentu (jak číst css) + +Prvním krokem v jakémkoli workflow pro čtení CSS je načíst zdrojové HTML. Aspose.HTML poskytuje třídu `HTMLDocument`, která soubor parsuje a vytvoří DOM, který můžete dotazovat. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Proč je to důležité:** Načtení dokumentu vytvoří kompletní DOM, což umožňuje spolehlivé výpočty stylů, které odpovídají tomu, co by vytvořil prohlížeč. Přeskočení tohoto kroku by vám zanechalo jen surový text místo strukturovaného dokumentu. + +## Krok 2: Vybrat prvek podle id + +Pro extrahování CSS pro konkrétní uzel nejprve potřebujete odkaz na tento uzel. Metoda `querySelector` přijímá libovolný CSS selektor, což ji činí ideální pro výběr podle ID. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Proč používat `querySelector`?:** Používá stejnou syntaxi selektorů jako v CSS, takže můžete znovu použít známé vzory jako `#myDiv`, `.className` nebo selektory atributů bez dalšího parsovacího kódu. + +## Krok 3: Získat vypočtený styl prvku + +Jakmile máte prvek, Aspose.HTML může vypočítat **vypočtený styl** — konečné hodnoty po aplikaci všech CSS pravidel, dědičnosti a výchozích nastavení. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Proč vypočítat styl?:** Vypočtený styl odráží skutečné hodnoty, které by prohlížeč vykreslil, nikoli jen surové deklarace. To je nezbytné, když potřebujete znát efektivní `background-color`, `font-size` nebo jakoukoli jinou vlastnost. + +## Krok 4: Extrahovat CSS vlastnost a zobrazit barvu pozadí + +Nyní, když máte `StyleDeclaration`, můžete číst jakoukoli CSS vlastnost. V tomto příkladu se zaměřujeme na **zobrazení barvy pozadí**, ale stejný přístup funguje i pro `font-size`, `margin` atd. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**Očekávaný výstup** + +``` +Background color: rgb(255, 0, 0) +``` + +Pokud prvek dědí své pozadí od nadřazeného prvku nebo stylového listu, vypočtená hodnota již bude zahrnovat tuto dědičnost. + +## Řešení okrajových případů a variant + +### Prvek nenalezen + +Pokud `querySelector` vrátí `null`, výše uvedený kód již vytiskne chybu a ukončí se. V produkci byste možná chtěli vyhodit vlastní výjimku nebo přejít na výchozí prvek. + +### Více prvků se stejným ID (neplatné HTML) + +I když by ID měla být unikátní, poškozené HTML může obsahovat duplikáty. `querySelector` vrátí první shodu. Pro zpracování všech shod použijte `querySelectorAll` a iterujte přes výsledný `NodeList`. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Různé CSS vlastnosti + +Pro **extrahování css z html** mimo barvu pozadí stačí zavolat odpovídající getter na `StyleDeclaration`. Běžné gettery zahrnují: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +Pokud vlastnost není explicitně nastavena, getter vrátí vypočtenou výchozí hodnotu (např. `display: block` pro `
`). + +### Prohlížeč‑specifické prefixy + +Aspose.HTML normalizuje vlastnosti s vendor‑prefixy (např. `-webkit-transform`) na jejich standardní ekvivalenty, pokud je to možné. Pokud potřebujete surovou hodnotu, můžete přímo dotazovat mapu `StyleDeclaration`: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +## Kompletní spustitelný příklad + +Níže je samostatná Java třída, která spojuje všechny kroky dohromady. Nahraďte `YOUR_DIRECTORY/input.html` cestou k vašemu HTML souboru. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**Spuštění programu** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +Měli byste vidět vytištěnou barvu pozadí v konzoli, což potvrzuje, že jste úspěšně **jak číst css**, **vybrali prvek podle id**, **získali vypočtený styl** a **zobrazili barvu pozadí**. + +## Tipy na nejlepší postupy (pro tipy) + +* **Ukládejte (`cache`) `HTMLDocument`** pokud potřebujete číst CSS z mnoha prvků; opakované parsování souboru snižuje výkon. +* **Validujte HTML** před načtením — poškozený markup může vést k chybějícím uzlům nebo nesprávným vypočteným hodnotám. +* **Používejte try‑with‑resources** (nebo explicitní `dispose`) k uvolnění nativních zdrojů držených objekty Aspose.HTML. +* **Logujte celý `StyleDeclaration`** při ladění složitých stylů: `System.out.println(computedStyle.getCssText());` vám poskytne snímek každé vypočtené vlastnosti. + +## Závěr + +Nyní víte **jak číst CSS** z HTML souboru v Javě pomocí Aspose.HTML. Načtením dokumentu, **vybráním prvku podle id**, **získáním vypočteného stylu** a **extrahováním vlastnosti background‑color** můžete programově zkoumat jakékoli informace o stylování, které by prohlížeč použil. + +Odtud můžete rozšířit řešení o extrahování dalších CSS atributů, zpracování více prvků nebo integraci dat do UI‑testovacího frameworku. + +Šťastné programování a nebojte se experimentovat s různými selektory a stylovými vlastnostmi, aby vyhovovaly potřebám vašeho projektu! + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční ukázky kódu s podrobnými vysvětleními, které vám pomohou zvládnout další funkce API a prozkoumat alternativní přístupy k implementaci ve vašich projektech. + +- [Jak získat CSS v Javě – Získat vypočtený styl s Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [jak číst css v Javě – Kompletní průvodce s Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Získat vypočtený styl Java – Extrahovat barvu pozadí z HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/czech/java/editing-html-documents/_index.md b/html/czech/java/editing-html-documents/_index.md index b8e69a1e7c..6b282a02b3 100644 --- a/html/czech/java/editing-html-documents/_index.md +++ b/html/czech/java/editing-html-documents/_index.md @@ -66,6 +66,8 @@ Objevte, jak přidat prvek jako potomka do těla HTML dokumentu v Javě pomocí Naučte se, jak změnit text h1 v souboru MHTML pomocí Aspose.HTML pro Javu v podrobném průvodci. ### [Vytvořte nový HTML prvek v Javě – Kompletní průvodce Aspose.HTML](./create-new-html-element-with-java-full-aspose-html-guide/) Naučte se, jak vytvořit nový HTML element pomocí Aspose.HTML v Javě s podrobným návodem krok za krokem. +### [Jak změnit barvu pozadí JavaScriptu pomocí Javy](./how-to-change-background-color-javascript-using-java/) +Naučte se, jak pomocí Aspose.HTML pro Javu změnit barvu pozadí v JavaScriptu v HTML dokumentu. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/czech/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/czech/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..4f1e013ba3 --- /dev/null +++ b/html/czech/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,246 @@ +--- +category: general +date: 2026-09-29 +description: Změňte barvu pozadí pomocí JavaScriptu v HTML souboru pomocí Javy. Naučte + se načíst HTML v Javě, spustit JavaScript v HTML a upravit HTML pomocí Javy pro + nové pozadí stránky. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: cs +lastmod: 2026-09-29 +og_description: Změňte barvu pozadí pomocí JavaScriptu v HTML stránce pomocí Javy. + Tento tutoriál vám ukáže, jak načíst HTML v Javě, spustit JS v HTML a nastavit pozadí + stránky programově. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: Změna barvy pozadí v JavaScriptu pomocí Javy – průvodce krok po kroku +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: Jak změnit barvu pozadí v JavaScriptu pomocí Javy +url: /cs/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Jak změnit barvu pozadí javascript pomocí Javy + +Pokud potřebujete **change background color javascript** v existujícím souboru HTML, můžete to provést kompletně z Javy bez otevírání prohlížeče. Tento tutoriál vám ukáže, jak **load html in java**, spustit malý úryvek JavaScriptu a poté **modify html with java**, aby se pozadí stránky aktualizovalo. + +Řešení funguje s open‑source knihovnou **HTMLUnit**, která poskytuje headless prohlížeč schopný vyhodnocovat JavaScript přesně tak, jako by to dělal skutečný prohlížeč. Na konci tohoto průvodce budete mít znovupoužitelnou metodu, která **sets page background** na libovolnou barvu, kterou si vyberete. + +## Požadavky + +| Co potřebujete | Proč je to důležité | +|---------------|----------------| +| Java 8 nebo novější | HTMLUnit vyžaduje alespoň Java 8. | +| Maven nebo Gradle build tool | Pro automatické stažení závislosti HTMLUnit. | +| HTML soubor, který chcete upravit (např. `input.html`) | Zdrojový dokument, který bude načten a změněn. | + +Přidejte HTMLUnit do svého projektu: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Tip:** Použijte nejnovější stabilní verzi HTMLUnit, abyste získali co nejpřesnější JavaScript engine. + +## Změna barvy pozadí javascript – načtení HTML v Javě + +Prvním krokem je načíst HTML dokument do objektu `HTMLPage`. To vám poskytne API podobné DOM a kontext pro vykonávání JavaScriptu. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Proč je to důležité*: `WebClient` vytváří sandboxované prostředí, kde může běžet JavaScript, takže můžete **run js in html** přesně tak, jak by to udělal prohlížeč uživatele. + +## Spuštění js v html pro nastavení pozadí stránky + +Jakmile je stránka načtena, můžete vyhodnotit libovolný JavaScript výraz. Níže uvedený úryvek mění styl `backgroundColor` elementu ``. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Vysvětlení*: +- `document.body.style.backgroundColor` je standardní DOM vlastnost pro pozadí stránky. +- Voláním `eval` **run js in html** bez potřeby skutečného okna prohlížeče. +- Metoda je znovupoužitelná pro libovolnou barvu, splňující požadavek **set page background**. + +## Úprava html pomocí Javy a uložení výsledku + +Po spuštění skriptu DOM odráží nový styl. Nyní můžete zapsat aktualizované HTML zpět na disk. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +Složení všeho dohromady vám poskytne jeden spustitelný program: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### Očekávaný výstup + +Spuštění programu vypíše: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +Otevření `js_modified.html` v libovolném prohlížeči zobrazí stránku se světle modrým pozadím, což potvrzuje úspěšnost operace **change background color javascript**. + +## Běžné varianty a okrajové případy + +| Situace | Jak to řešit | +|-----------|------------------| +| **Různé formáty barev** | Předávejte libovolnou hodnotu kompatibilní s CSS (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **Chybějící tag ``** | Skript selže tiše; můžete nejprve zajistit, že `` existuje pomocí `page.getFirstByXPath("//body")`. | +| **Velké HTML soubory** | Vypněte CSS (`setCssEnabled(false)`) a povolte jen JavaScriptové funkce, které potřebujete, aby se snížila spotřeba paměti. | +| **Spouštění více skriptů** | Volajte `changeBackground` opakovaně nebo vytvořte pomocnou metodu, která přijímá seznam JavaScriptových příkazů. | + +## Závěr + +Nyní víte, jak **change background color javascript** načtením HTML souboru v Javě, **run js in html**, a **modify html with java**, abyste **set page background** na libovolnou barvu podle vašeho výběru. Kompletní příklad výše funguje s nejnovější knihovnou HTMLUnit a může být integrován do větších automatizačních pipeline, jako je dávkové zpracování HTML reportů nebo příprava e‑mailových šablon. + +**Další kroky** +- Prozkoumejte další manipulace s DOM (např. vkládání elementů, odstraňování skriptů). +- Kombinujte tento přístup s PDF renderérem pro generování PDF stylizovaných stránek. +- Vyzkoušejte použití jiného headless enginu, jako je Selenium WebDriver, pokud potřebujete plnou věrnost prohlížeče. + +Šťastné programování! + +## Co byste se měli naučit dál? + +Následující tutoriály pokrývají úzce související témata, která staví na technikách předvedených v tomto průvodci. Každý zdroj obsahuje kompletní funkční příklady kódu s podrobnými vysvětleními, které vám pomohou zvládnout další funkce API a prozkoumat alternativní přístupy k implementaci ve vašich projektech. + +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Generate HTML from JavaScript in Java – Complete Step‑by‑Step Guide](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/java/configuring-environment/_index.md b/html/dutch/java/configuring-environment/_index.md index 5a6b938e97..bece4a8a3a 100644 --- a/html/dutch/java/configuring-environment/_index.md +++ b/html/dutch/java/configuring-environment/_index.md @@ -114,6 +114,8 @@ Learn how to implement sandboxing in Aspose.HTML for Java to securely control sc Learn how to set a custom user stylesheet in Aspose.HTML for Java, enhancing your document styling and converting HTML to PDF with ease. ### [Maak Aspose HTML Sandbox – Complete Java-gids](./create-aspose-html-sandbox-complete-java-guide/) Leer hoe je een Aspose HTML‑sandbox maakt in Java, zodat scripts veilig worden uitgevoerd en HTML‑conversies veilig zijn. +### [Aangepaste user‑agent en schermafmetingen instellen in Aspose.HTML voor Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Leer hoe je een aangepaste user‑agent en schermgrootte configureert in Aspose.HTML voor Java voor nauwkeurige conversies. --- diff --git a/html/dutch/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/dutch/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..aa09b59a1f --- /dev/null +++ b/html/dutch/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,191 @@ +--- +category: general +date: 2026-09-29 +description: Stel een aangepaste user‑agent in Aspose.HTML voor Java in en leer hoe + je de virtuele schermgrootte kunt instellen voor nauwkeurige HTML‑weergave. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: nl +lastmod: 2026-09-29 +og_description: Stel een aangepaste user‑agent in Aspose.HTML voor Java in en leer + hoe je de virtuele schermgrootte instelt voor nauwkeurige HTML‑weergave. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Stel een aangepaste user-agent en schermafmetingen in Aspose.HTML voor Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Stel aangepaste user‑agent en schermafmetingen in Aspose.HTML voor Java +url: /nl/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Stel een aangepaste user‑agent en schermafmetingen in Aspose.HTML voor Java in + +Als je een **aangepaste user‑agent** wilt instellen tijdens het renderen van HTML met Aspose.HTML voor Java, laat deze gids je precies zien hoe dat moet. Door een sandbox te configureren krijg je ook de mogelijkheid om een **virtuele schermgrootte** in te stellen, zodat de lay‑out overeenkomt met een echt browser‑viewport. + +Je rondt deze tutorial af met een compleet, uitvoerbaar programma dat **user‑agent specificeert**, **schermbreedte instelt** en **schermhoogte instelt**. Er zijn geen externe tools nodig—alleen Aspose.HTML voor Java en een Java 8+ runtime. + +## Wat je zult leren + +* Hoe je een `SandboxConfiguration` maakt om het renderen te isoleren. +* Hoe je **een aangepaste user‑agent instelt** en waarom dat belangrijk is voor responsieve pagina’s. +* Hoe je **virtuele schermgrootte instelt** (schermbreedte en -hoogte) voor een nauwkeurige lay‑out. +* Hoe je een HTML‑bestand laadt in de sandbox en het verwerkte resultaat opslaat. +* Veelvoorkomende valkuilen en best‑practice‑tips voor sandbox‑renderen. + +> **Prerequisites** – Je hebt een geldige Aspose.HTML voor Java‑licentie, Java 8 of nieuwer, en een IDE (IntelliJ IDEA, Eclipse of VS Code) nodig. Het voorbeeld gebruikt een lokaal `input.html`‑bestand, maar elke bereikbare URL werkt. + +![Sandbox stroomdiagram](sandbox-flow.png "voorbeeld van aangepaste user agent instellen in Java") + +## Stap 1: Maak een sandbox‑configuratie (de basis) + +De sandbox isoleert de renderomgeving van de host‑JVM, wat essentieel is wanneer je een **aangepaste user‑agent** wilt **instellen** of de viewport‑grootte wilt wijzigen. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Waarom deze stap?* +`SandboxConfiguration` bevat alle renderopties, inclusief **schermafmetingen** en **user‑agent**‑strings. Door het vóór het laden van het document te configureren, garandeer je dat de HTML‑engine die instellingen vanaf het eerste verzoek respecteert. + +## Stap 2: Stel schermafmetingen in om een echt apparaat na te bootsen + +Responsieve sites lezen vaak `window.innerWidth` en `window.innerHeight`. Om de engine te laten denken dat hij draait op een scherm van 1024 × 768, **stel je de virtuele schermgrootte in**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Waarom dit belangrijk is* – Als je **schermafmetingen niet instelt**, kan de renderer standaard een heel klein viewport gebruiken, waardoor CSS‑media‑queries de mobiele lay‑out kiezen. Door expliciet **schermbreedte** en **schermhoogte** in te stellen, bepaal je welke CSS‑regels worden toegepast. + +## Stap 3: Specificeer een aangepaste user‑agent‑string + +Sommige webpagina’s leveren verschillende inhoud op basis van de user‑agent‑header. Om **user‑agent te specificeren** stel je deze simpelweg in op de sandbox‑configuratie: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Waarom een aangepaste user‑agent gebruiken?* +Een aangepaste string kan botdetectie omzeilen, desktop‑only functionaliteit activeren, of testen hoe een site zich gedraagt voor een specifieke browser‑versie. De Aspose‑engine stuurt deze waarde mee met elk HTTP‑verzoek dat wordt gedaan tijdens het laden van externe bronnen (CSS, afbeeldingen, scripts). + +## Stap 4: Laad het HTML‑document binnen de sandbox + +Nu de sandbox volledig geconfigureerd is, laad je het HTML‑bestand. De constructor die een bestandspad en een `SandboxConfiguration` accepteert, past automatisch alle instellingen toe die we hebben gedefinieerd. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +Als je van een externe URL wilt laden, vervang je het bestandspad door de URL‑string—Aspose.HTML respecteert nog steeds de **aangepaste user‑agent** en **schermafmetingen**. + +## Stap 5: Sla de verwerkte output op + +Nadat het document klaar is met laden, kun je het opslaan in elk ondersteund formaat. Hier schrijven we een gesandboxte HTML‑file die eventuele DOM‑wijzigingen weerspiegelt die door de aangepaste instellingen zijn veroorzaakt. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +Het opgeslagen bestand bevat dezelfde markup, maar scripts die `navigator.userAgent` of `window.innerWidth` hebben opgevraagd, zien nu de waarden die jij hebt opgegeven. + +## Volledig, uitvoerbaar voorbeeld + +Alle stappen samengevoegd geven je een zelf‑containend programma dat je kunt kopiëren, plakken en uitvoeren. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Verwachte output + +Het uitvoeren van het programma maakt `sandboxed_output.html`. Als je dit bestand in een browser opent en `navigator.userAgent` inspecteert via de console, zie je **AsposeHTML/1.0**. Evenzo zal `window.innerWidth` **1024** rapporteren, wat bevestigt dat **schermafmetingen ingesteld** zijn zoals bedoeld. + +## Veelgestelde vragen & edge‑case handling + +| Vraag | Antwoord | +|----------|--------| +| **Wat als de pagina extra bronnen laadt van een ander domein?** | De sandbox stuurt de **aangepaste user‑agent** mee met elk verzoek, maar cross‑origin‑beleid blijft van kracht. Gebruik `sandboxConfig.setAllowCrossDomain(true)` als je die beperkingen wilt versoepelen. | +| **Kan ik de schermgrootte wijzigen nadat het document is geladen?** | Nee. Schermafmetingen worden gelezen tijdens de eerste layout‑pass. Om met een andere grootte te renderen, maak je een nieuwe `SandboxConfiguration` en laad je het document opnieuw. | +| **Moet ik `document.close()` aanroepen?** | `HTMLDocument` implementeert `AutoCloseable`. Een try‑with‑resources‑blok zorgt voor correcte opruiming, maar een expliciete `close()` is optioneel in eenvoudige scripts. | +| **Hoe verschilt dit van het instellen van een user‑agent in een HTTP‑client?** | Het instellen van de user‑agent op de sandbox beïnvloedt **alle** resource‑verzoeken die de HTML‑engine maakt, niet alleen de initiële HTML‑opvraag. Dit bootst een echte browser nauwkeuriger na. | +| **Is de sandbox veilig voor onbetrouwbare HTML?** | Ja. De sandbox isoleert bestands‑systeemtoegang en beperkt netwerk‑calls volgens de configuratie, waardoor het risico dat kwaadaardige scripts de host‑JVM beïnvloeden, wordt verminderd. | + +## Pro‑tips + +* **Herbruik configuraties** – Als je veel pagina’s met dezelfde viewport rendert, maak dan één `SandboxConfiguration` aan en hergebruik deze om overhead van objectcreatie te vermijden. +* **Debug met logging** – Schakel Aspose.HTML‑logging in (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) om te zien welke bronnen met de aangepaste user‑agent zijn opgehaald. +* **Combineer met CSS‑media‑queries** – Door **schermbreedte** aan te passen kun je testen hoe je responsieve ontwerp zich gedraagt op tablets, telefoons of grote desktops zonder een echte browser te openen. + +## Conclusie + +Je weet nu hoe je **een aangepaste user‑agent** en **schermafmetingen** instelt bij het renderen van HTML met Aspose.HTML voor Java. Door een sandbox te configureren, isoleer je de omgeving, beheer je de viewport, en zorg je ervoor dat externe bronnen exact de headers zien die jij opgeeft. Deze techniek is essentieel voor het testen van responsieve lay‑outs, het omzeilen van bot‑blokkades, of het reproduceren van desktop‑only functionaliteit in geautomatiseerde pipelines. + +Vervolgens kun je **leren hoe je aangepaste cookies instelt** of **rendered screenshots vastlegt** met de rendering‑API van Aspose.HTML—beide concepten bouwen voort op hetzelfde sandbox‑configuratie‑patroon dat je nu beheerst. + +Happy coding! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap‑uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [High DPI Rendering in Java – Capture Webpage Screenshots with Custom User Agent](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Create HTML File Java & Set Up Network Service (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/java/creating-managing-html-documents/_index.md b/html/dutch/java/creating-managing-html-documents/_index.md index 45011ae856..35624954d0 100644 --- a/html/dutch/java/creating-managing-html-documents/_index.md +++ b/html/dutch/java/creating-managing-html-documents/_index.md @@ -35,11 +35,11 @@ Stel je voor dat je HTML-inhoud on-the-fly moet genereren op basis van gebruiker ## Genereer nieuwe HTML-documenten en verwerk geavanceerd laden van bestanden -Als het gaat om het genereren van nieuwe HTML-documenten, biedt Aspose.HTML voor Java een robuuste oplossing waarmee u rijke webcontent vanaf nul kunt bouwen. Of u nu werkt met een contentmanagementsysteem of rapporten in HTML-formaat moet genereren, het is cruciaal om te begrijpen hoe u nieuwe HTML-documenten kunt maken en beheren. Bovendien kunt u met geavanceerde technieken voor het laden van bestanden werken met complexe HTML-documenten, zodat u grootschalige projecten met gemak kunt verwerken. Deze tutorials begeleiden u door elke stap, zodat u bent uitgerust om elke HTML-gerelateerde uitdaging aan te gaan.[Lees meer](./generate-new-html-documents/) +Als het gaat om het genereren van nieuwe HTML-documenten, biedt Aspose.HTML voor Java een robuuste oplossing waarmee u rijke webcontent vanaf nul kunt bouwen. Of u nu werkt met een contentmanagementsysteem of rapporten in HTML-formaat moet genereren, is het cruciaal om te begrijpen hoe u nieuwe HTML-documenten kunt maken en beheren. Bovendien kunt u met geavanceerde technieken voor het laden van bestanden werken met complexe HTML-documenten, zodat u grootschalige projecten met gemak kunt verwerken. Deze tutorials begeleiden u door elke stap, zodat u bent uitgerust om elke HTML‑gerelateerde uitdaging aan te gaan.[Lees meer](./generate-new-html-documents/) ## SVG-documenten beheren en gebeurtenissen verwerken - Tot slot, voor degenen die hun vaardigheden nog verder willen uitbreiden, is er een schat aan geavanceerde onderwerpen om te verkennen. Leer hoe u SVG-documenten beheert of documentlaadgebeurtenissen verwerkt om responsieve en dynamische webapplicaties te maken. Deze tutorials nemen u mee voorbij HTML en duiken in de complexiteit van Scalable Vector Graphics (SVG) en event-driven programmeren.[Lees meer](./create-manage-svg-documents/) + Tot slot, voor degenen die hun vaardigheden nog verder willen uitbreiden, is er een schat aan geavanceerde onderwerpen om te verkennen. Leer hoe u SVG-documenten beheert of documentlaadgebeurtenissen verwerkt om responsieve en dynamische webapplicaties te maken. Deze tutorials nemen u mee voorbij HTML en duiken in de complexiteit van Scalable Vector Graphics (SVG) en event‑driven programmeren.[Lees meer](./create-manage-svg-documents/) ## HTML-documenten maken en beheren in Aspose.HTML voor Java-zelfstudies @@ -51,14 +51,16 @@ Leer hoe u lege HTML-documenten in Java kunt maken met Aspose.HTML met onze gede ### [HTML-documenten laden vanuit een bestand in Aspose.HTML voor Java](./load-html-documents-from-file/) Ontgrendel de kracht van HTML-manipulatie met Aspose.HTML voor Java. Leer HTML-documenten laden vanuit bestanden met stapsgewijze tutorials. ### [Geavanceerd laden van bestanden voor HTML-documenten in Aspose.HTML voor Java](./advanced-file-loading-html-documents/) -Leer hoe u HTML-documenten laadt, bewerkt en opslaat met Aspose.HTML voor Java in deze stapsgewijze handleiding. Ontgrendel geavanceerde HTML-verwerking in uw Java-projecten. +Leer hoe u HTML-documenten laadt, bewerkt en opslaat met Aspose.HTML voor Java in deze stapsgewijze handleiding. Ontgrendel geavanceerde HTML-verwerking in uw Java‑projecten. ### [Laad HTML-documenten uit de stream met Aspose.HTML voor Java](./load-html-documents-from-stream/) Leer hoe u HTML-documenten laadt uit streams met Aspose.HTML voor Java. Deze gids biedt een stapsgewijze tutorial voor naadloze HTML-manipulatie. ### [HTML-documenten maken van strings in Aspose.HTML voor Java](./create-html-documents-from-string/) Leer hoe u HTML-documenten van strings maakt in Aspose.HTML voor Java met deze stapsgewijze handleiding. +### [Hoe een HTML-element maken in Java met Aspose.HTML](./how-to-create-html-element-in-java-using-aspose-html/) +Leer hoe u met Aspose.HTML voor Java HTML-elementen kunt maken en manipuleren via eenvoudige codevoorbeelden. ### [HTML-documenten laden vanaf URL in Aspose.HTML voor Java](./load-html-documents-from-url/) Ontdek hoe u eenvoudig HTML-documenten kunt laden vanaf een URL in Java met Aspose.HTML. Inclusief stapsgewijze tutorial. -### [HTML-document maken met Java – JSON ophalen en inhoud genereren](./create-html-document-with-java-fetch-json-and-generate-conte/) +### [HTML document maken met Java – JSON ophalen en inhoud genereren](./create-html-document-with-java-fetch-json-and-generate-conte/) Leer hoe u met Java JSON-gegevens ophaalt en dynamisch een HTML-document genereert met Aspose.HTML. ### [Genereer nieuwe HTML-documenten met Aspose.HTML voor Java](./generate-new-html-documents/) Leer hoe u nieuwe HTML-documenten maakt met Aspose.HTML voor Java met deze eenvoudige stapsgewijze handleiding. Begin met het genereren van dynamische HTML-inhoud. @@ -80,8 +82,10 @@ Leer hoe u asynchrone JavaScript-code in Java kunt uitvoeren met Aspose.HTML, in Leer stap‑voor‑stap hoe u HTML‑documenten laadt in Java met XPath‑ en CSS‑selectoren. ### [HTML-tekens tellen in Java – Volledige gids met Aspose HTML](./count-html-characters-in-java-full-guide-with-aspose-html/) Leer hoe u het aantal HTML‑tekens in een document kunt tellen met Aspose.HTML voor Java in deze stapsgewijze volledige gids. -### [Tekst extraheren uit HTML in Java – Complete programmeergids](./extract-text-from-html-in-java-complete-programming-guide/) -Leer hoe u tekst uit HTML-documenten kunt extraheren in Java met deze volledige stap‑voor‑stap handleiding. +### [Hoe HTML-elementen tellen in Java met XPath](./how-to-count-html-elements-in-java-with-xpath/) +Leer hoe u HTML‑elementen kunt tellen in Java met behulp van XPath via Aspose.HTML, inclusief voorbeeldcode en stapsgewijze uitleg. +### [Hoe elementen selecteren op class in Java met querySelectorAll](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Leer hoe u met querySelectorAll elementen op basis van class selecteert in Java met Aspose.HTML. {{< /blocks/products/pf/tutorial-page-section >}} @@ -108,4 +112,4 @@ Leer hoe u door een NodeList in Java kunt itereren met een stapsgewijze handleid {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/dutch/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..05d66c29a3 --- /dev/null +++ b/html/dutch/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-09-29 +description: Leer hoe je HTML‑elementen kunt tellen in Java met Aspose.HTML en XPath. + Deze gids laat zien hoe je een HTML‑document laadt, knooppunten selecteert met XPath + en een knooppuntenlijst krijgt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: nl +lastmod: 2026-09-29 +og_description: Hoe HTML-elementen te tellen in Java met Aspose.HTML. Volg deze volledige + tutorial om een HTML-document te laden, knooppunten te selecteren met XPath, XPath + in Java te evalueren en een knooppuntenlijst te verkrijgen. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: Hoe HTML‑elementen te tellen in Java – stapsgewijze handleiding +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: Hoe HTML-elementen te tellen in Java met XPath +url: /nl/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe HTML-elementen te tellen in Java met XPath + +Als je **hoe HTML-elementen te tellen** in een webpagina vanuit een Java‑applicatie nodig hebt, biedt deze gids een complete, kant‑klaar‑te‑run oplossing. Na de eerste twee zinnen weet je precies hoe je een HTML‑document laadt, knooppunten selecteert met XPath, en een knooppuntenlijst ophaalt die je kunt tellen. + +We gebruiken de Aspose.HTML for Java bibliotheek omdat deze een DOM‑compatibele API en een krachtige XPath‑engine biedt. De tutorial behandelt alles wat je nodig hebt—imports, code, uitleg en verwachte output—zodat je het voorbeeld kunt kopiëren naar je project en direct resultaten ziet. Onderweg komen we ook aan de slag met **select nodes with XPath**, **get node list Java**, **load HTML document Java**, en **evaluate XPath in Java**. + +## Wat je zult bereiken + +* Laad een HTML‑bestand van het bestandssysteem. +* Maak een XPath‑expressie die specifieke elementen target. +* Evalueer de XPath‑expressie tegen het document. +* Haal een `NodeList` op en tel hoeveel overeenkomende elementen er zijn. + +Er zijn geen externe services of complexe configuratie nodig; alleen de Aspose.HTML JAR op je classpath. + +--- + +## Hoe HTML-elementen te tellen met XPath in Java + +Deze stap‑voor‑stap sectie toont de exacte code die je nodig hebt. Elke subsectie correspondeert met een logisch deel van het proces, waardoor het gemakkelijk is om aan te passen of uit te breiden. + +### Stap 1: Laad het HTML‑document in Java + +Eerst laad je het HTML‑bestand in het geheugen. De `HTMLDocument`‑klasse parseert het bestand en bouwt een DOM‑boom die door XPath kan worden bevraagd. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Waarom dit belangrijk is:** +Het laden van het document creëert een DOM‑representatie, die vereist is voor elke XPath‑evaluatie. Als het bestandspad onjuist is, gooit Aspose.HTML een `FileNotFoundException`, dus controleer de locatie van `input.html` nogmaals. + +### Stap 2: Maak en evalueer een XPath‑expressie + +Nu bouwen we een XPath die de elementen selecteert die we willen tellen. In dit voorbeeld tellen we alle ``‑tags waarvan het `alt`‑attribuut gelijk is aan "logo". + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Waarom dit belangrijk is:** +De expressie `//img[@alt='logo']` is een beknopte manier om **select nodes with XPath**. De `evaluate`‑aanroep **evaluate XPath in Java** en retourneert een generiek `XPathResult`. Casten naar `NodeList` geeft ons directe toegang tot de collectie van overeenkomende knooppunten. + +### Stap 3: Haal de knooppuntenlijst op en tel + +Tot slot tellen we hoeveel knooppunten er zijn geretourneerd. De `NodeList`‑API biedt `getLength()` voor dit doel. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Waarom dit belangrijk is:** +`getLength()` is de eenvoudigste manier om **get node list Java** te verkrijgen en een telling te krijgen. Als de XPath geen elementen vindt, zal de lengte `0` zijn, wat je applicatie op een nette manier kan afhandelen. + +### Volledig uitvoerbaar voorbeeld + +Hieronder staat het volledige programma, inclusief alle imports en een minimale `main`‑methode. Kopieer het naar een bestand genaamd `CountHtmlElements.java`, voeg de Aspose.HTML JAR toe aan je project, en voer het uit. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Verwachte output** + +Als `input.html` drie `logo`‑tags bevat, print het programma: + +``` +Found 3 logo images. +``` + +Als er geen dergelijke afbeeldingen bestaan, print het: + +``` +Found 0 logo images. +``` + +--- + +## Veelvoorkomende variaties en randgevallen + +| Situatie | Wat te wijzigen | Reden | +|----------|----------------|-------| +| Een ander element tellen (bijv. `
` met class `header`) | Verander de XPath naar `//div[@class='header']` | XPath‑syntaxis laat je elk tag/attribuut targeten. | +| Alle elementen tellen ongeacht attribuut | Gebruik `//*` als de XPath‑expressie | `//*` selecteert elk element‑knooppunt in het document. | +| Grote documenten die geheugenbelasting veroorzaken | Gebruik een streaming‑parser of evalueer XPath op een fragment | Aspose.HTML biedt `HTMLDocumentFragment` voor gedeeltelijke parsing. | +| De daadwerkelijke knooppunten nodig, niet alleen de telling | Iterate over `nodes.item(i)` | Je kunt elk knooppunt verwerken na het tellen. | + +**Pro tip:** Valideer altijd de XPath‑string voordat je deze doorgeeft aan `createXPathExpression`. Een ongeldige expressie gooit `XPathException`, die je kunt opvangen om een vriendelijke foutmelding te geven. + +--- + +## Checklist voor probleemoplossing + +1. **Library not found** – Zorg ervoor dat de Aspose.HTML for Java JAR op de classpath staat (`-cp` of de afhankelijkheden van je IDE). +2. **File not found** – Controleer of `input.html` zich bevindt ten opzichte van de werkdirectory of gebruik een absoluut pad. +3. **Zero results** – Controleer de attribuutwaarden en hoofdlettergevoeligheid (`alt='logo'` vs `alt='Logo'`). XPath is hoofdlettergevoelig. +4. **Performance concerns** – Hergebruik een enkele `HTMLDocument`‑instantie als je veel XPath‑queries op hetzelfde bestand moet uitvoeren. + +--- + +## Conclusie + +Je weet nu **hoe HTML-elementen te tellen** in Java met behulp van Aspose.HTML en XPath. Door het HTML‑document te laden, een XPath‑expressie te maken, **evaluate XPath in Java**, en een **node list** op te halen, kun je snel het aantal overeenkomende elementen bepalen. Deze techniek werkt voor elk tag of attribuut, waardoor het een veelzijdig hulpmiddel is voor web‑scraping, geautomatiseerd testen of inhoudsanalyse. + +Volgende stappen die je kunt verkennen zijn onder andere: + +* **select nodes with XPath** gebruiken om attribuutwaarden te extraheren (bijv. image `src`). +* Meerdere XPath‑queries combineren om een rapport van elementstatistieken te maken. +* Deze logica integreren in een grotere Java‑service die HTML‑bestanden in bulk verwerkt. + +Voel je vrij om te experimenteren met verschillende XPath‑expressies en documentstructuren—HTML-elementen tellen is slechts het begin! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe HTML te parseren in Java – Laden, Queryen & Elementen tellen](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [Hoe HTML te queryen in Java – Elementen selecteren, filteren op attribuut, en tekst ophalen](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [HTML-document laden in Java – Complete gids met XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/dutch/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..b958165393 --- /dev/null +++ b/html/dutch/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,183 @@ +--- +category: general +date: 2026-09-29 +description: Leer hoe je een HTML‑element maakt in Java, een alinea toevoegt, de tekst + instelt en het aan de body toevoegt met Aspose.HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: nl +lastmod: 2026-09-29 +og_description: Maak een HTML-element in Java door een alinea toe te voegen, de tekst + in te stellen en het aan de body toe te voegen met Aspose.HTML. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: HTML-element maken in Java – stapsgewijze Aspose.HTML-gids +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: Hoe een HTML‑element te maken in Java met Aspose.HTML +url: /nl/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe een HTML-element te maken in Java met Aspose.HTML + +Als je een **HTML-element wilt maken** in een Java‑applicatie, laat deze gids je een volledige, uitvoerbare oplossing zien. Je ziet hoe je een **paragraaf toevoegt**, de tekst instelt, en het **element aan de body toevoegt** van een bestaand HTML‑bestand met Aspose.HTML. + +De tutorial behandelt alles, van het laden van een document tot het opslaan van het gewijzigde bestand, zodat je de code kunt kopiëren naar je eigen project zonder verder onderzoek. + +## Vereisten + +* Java 17 of later geïnstalleerd. +* Aspose.HTML for Java 23.10 (of de nieuwste versie) toegevoegd aan de classpath van je project. +* Een eenvoudig `input.html`‑bestand in een bekende map. Het bestand kan leeg zijn (``) of bestaande markup bevatten. + +## Stap 1: Laad het bestaande HTML‑document + +Het laden van het bronbestand geeft je een bewerkbare DOM‑boom. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +De `HTMLDocument`‑constructor parseert het bestand en maakt een live DOM aan. Als het bestand niet gelezen kan worden, gooit Aspose.HTML een `IOException`; je kunt de uitzondering laten propageren of afhandelen met een try‑catch‑blok. + +## Stap 2: Maak een nieuw `

`‑element en voeg tekst toe aan HTML + +Het maken van een nieuw element is vergelijkbaar met het gebruik van `document.createElement` in een browser. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` maakt automatisch een tekstnode aan en koppelt deze aan het element, wat de aanbevolen manier is om **tekst aan HTML toe te voegen**. Deze methode escapt ook tekens die de markup zouden kunnen breken. + +## Stap 3: Voeg element toe aan body + +Nu de paragraaf klaar is, moet je deze plaatsen binnen de `` van het document. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` retourneert het ``‑node, en `appendChild` voegt de nieuwe `

` toe als laatste kind. Als het document geen ``‑element heeft (onwaarschijnlijk voor een goed gevormd HTML‑bestand), maakt Aspose.HTML er automatisch een aan. + +## Stap 4: Sla het gewijzigde document op + +Schrijf tenslotte de bijgewerkte DOM terug naar de schijf. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` serialiseert de DOM, behoudt de bestaande markup en voegt de nieuwe paragraaf toe. Het resulterende `output.html` zal bevatten: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Volledige broncode (java html voorbeeld) + +Alle stappen samenvoegen geeft je een zelfstandige applicatie die je direct kunt uitvoeren. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### Wat de code doet + +| Stap | Actie | Waarom het belangrijk is | +|------|--------|--------------------------| +| Laad document | `new HTMLDocument(...)` | Parseert de bron‑HTML naar een DOM die je kunt manipuleren. | +| Maak element | `doc.createElement("p")` | Spiegelt de browser‑API, waardoor het element voldoet aan HTML‑normen. | +| Stel tekst in | `setTextContent(...)` | Zorgt voor correcte escaping en voorkomt handmatige creatie van tekst‑nodes. | +| Voeg toe aan body | `doc.getBody().appendChild(...)` | Plaatst het nieuwe element waar browsers het zullen renderen. | +| Sla bestand op | `doc.save(...)` | Bewaar de wijzigingen, waardoor een geldig HTML‑bestand ontstaat dat klaar is voor verder gebruik. | + +## Veelvoorkomende variaties en randgevallen + +* **Meerdere elementen toevoegen** – herhaal stap 2‑3 voor elk nieuw node voordat je `save` aanroept. +* **Invoegen vóór een specifiek node** – gebruik `insertBefore(newNode, referenceNode)` in plaats van `appendChild`. +* **Werken met fragmenten** – `doc.createDocumentFragment()` stelt je in staat een groep nodes te bouwen en in één bewerking toe te voegen, wat de prestaties bij grote updates verbetert. +* **Omgaan met UTF‑8‑tekens** – Aspose.HTML schrijft automatisch UTF‑8; zorg er alleen voor dat je bronbestand op dezelfde manier is gecodeerd. + +## Praktische tips + +* **Padafhandeling** – Gebruik `java.nio.file.Paths` om platformonafhankelijke bestandspaden te bouwen. +* **Uitzonderingsveiligheid** – Plaats het hele blok in een try‑with‑resources‑statement als je extra streams moet sluiten. +* **Prestaties** – Voor zeer grote HTML‑bestanden, overweeg het document te laden met `HTMLDocument(String, LoadOptions)` waarbij je externe resources kunt uitschakelen om het parsen te versnellen. + +## Verifieer het resultaat + +Na het uitvoeren van het programma, open `output.html` in een willekeurige browser. Je zou de paragraaf “Added by Aspose.HTML” moeten zien verschijnen waar de oorspronkelijke body eindigt. Inspecteer de paginabron om te bevestigen dat het `

`‑element aanwezig is binnen ``. + +## Conclusie + +Je weet nu hoe je een **HTML-element kunt maken** in Java, een **paragraaf kunt toevoegen**, **tekst aan HTML kunt toevoegen**, en een **element aan de body kunt toevoegen** met Aspose.HTML. Het volledige **java html voorbeeld** toont een schone, productie‑klare workflow die je kunt uitbreiden om elk deel van een HTML‑document te manipuleren. + +Verken vervolgens gerelateerde onderwerpen zoals **attributen wijzigen**, **nodes verwijderen**, of **werken met CSS‑stijlen** om rijkere HTML‑verwerkingspijplijnen te bouwen. Veel programmeerplezier! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap‑uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Create new html element with Java – Full Aspose.HTML Guide](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [append child to body in Java – Full Aspose.HTML Tutorial](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Append Element to Body with Aspose.HTML for Java using a DOM Mutation Observer](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/dutch/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..de5524793e --- /dev/null +++ b/html/dutch/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-09-29 +description: Leer hoe je elementen selecteert op basis van klasse, HTML uit een bestand + leest en externe links vindt in Java. Deze stapsgewijze gids behandelt het efficiënt + itereren over een NodeList. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: nl +lastmod: 2026-09-29 +og_description: Selecteer elementen op basis van klasse in Java, lees HTML uit een + bestand en vind externe links met querySelectorAll. Volg het volledige voorbeeld + om een NodeList te itereren. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Elementen selecteren op klasse in Java – volledige gids met querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: Hoe elementen selecteren op basis van klasse in Java met querySelectorAll +url: /nl/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe selecteer je elementen op class in Java met querySelectorAll + +Als je **elementen op class** moet selecteren tijdens het verwerken van een HTML‑bestand in Java, laat deze gids je precies zien hoe je dat doet. Je leert HTML uit een bestand te lezen, `querySelectorAll` te gebruiken om externe links te vinden, en de resulterende `NodeList` veilig te itereren. + +Werken met HTML in Java voelt vaak zwaar, maar moderne bibliotheken bieden je een beknopte, CSS‑selector‑gebaseerde API. Het voorbeeld hieronder gebruikt **jsoup** (versie 1.17.2) omdat het `querySelectorAll`‑achtige selectors implementeert en een `Elements`‑collectie retourneert die zich gedraagt als een `NodeList`. Je kunt dezelfde logica aanpassen voor andere DOM‑implementaties indien nodig. + +## Vereisten + +* JDK 17 of nieuwer geïnstalleerd. +* Maven of Gradle voor afhankelijkheidsbeheer. +* Basiskennis van Java‑streams en het DOM‑model. + +Voeg jsoup toe aan je project: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## Stap 1: HTML uit bestand lezen + +De eerste taak is het HTML‑document van de schijf te laden. `Jsoup.parse(Path, Charset)` leest het bestand en bouwt een DOM‑boom die je kunt doorzoeken. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Waarom dit belangrijk is*: Het bestand één keer laden voorkomt herhaald I/O terwijl je later over elementen iterereert. Het `Document`‑object bevat de volledige DOM, waardoor snelle selector‑queries mogelijk zijn. + +## Stap 2: Gebruik `querySelectorAll` om elementen op class te selecteren + +Nu het document in het geheugen staat, kun je **elementen op class** selecteren met een CSS‑selector. De selector `"a.external"` komt overeen met ``‑tags die de `external`‑class hebben—precies wat je nodig hebt om **externe links te vinden**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Waarom dit belangrijk is*: Het gebruik van een class‑selector is zowel expressief als performant. De bibliotheek vertaalt de selector naar een geoptimaliseerde traversie, zodat je geen handmatige lussen over elke node hoeft te schrijven. + +## Stap 3: Iterate de NodeList (Elements) in Java + +`Elements` implementeert `Iterable`, wat betekent dat je een standaard `for‑each`‑lus kunt gebruiken om **NodeList Java**‑objecten te itereren. De onderstaande lus print de `href`‑attribuut van elke link. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Waarom dit belangrijk is*: Direct itereren houdt de code leesbaar en voorkomt de overhead van het omzetten van de collectie naar een stream wanneer je alleen eenvoudige output nodig hebt. + +## Volledig werkend voorbeeld + +Door de drie stappen te combineren krijg je een zelfstandig programma dat je vanaf de commandoregel kunt uitvoeren. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Verwachte output + +Aangenomen dat `input.html` bevat: + +```html +Example +About +OpenAI +``` + +Het uitvoeren van het programma print: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Pro‑tips en veelvoorkomende valkuilen + +* **Encoding is belangrijk** – Lees het bestand altijd met UTF‑8 (of de charset die bij je bron past). Een onjuiste encoding kan tekens in attribuutwaarden corrupt maken. +* **Meerdere classes** – Als een element meerdere classes heeft (bijv. `class="btn external"`), komt de selector `"a.external"` nog steeds overeen omdat CSS‑class‑selectors controleren op de aanwezigheid van het token, niet op de exacte string. +* **Performance‑tip** – Als je alleen het `href`‑attribuut nodig hebt, kun je dit direct opvragen met `doc.select("a.external[href]").eachAttr("href")`. Dit voorkomt het aanmaken van volledige `Element`‑objecten voor elke match. +* **Null‑veiligheid** – `link.attr("href")` retourneert een lege string als het attribuut ontbreekt, dus je hoeft geen null‑check uit te voeren vóór het afdrukken. + +## Veelgestelde vragen + +**Q: Werkt dit met HTML‑fragmenten die geen ``‑root hebben?** +A: Ja. `Jsoup.parse` behandelt de invoer als een fragment en voegt automatisch ontbrekende root‑elementen toe, waardoor selectors werken op de body van het fragment. + +**Q: Kan ik `querySelectorAll` gebruiken zonder jsoup?** +A: De standaard Java DOM‑API (`org.w3c.dom`) bevat geen `querySelectorAll`. Bibliotheken zoals **HTMLUnit** of **jodd-lagarto** bieden vergelijkbare methoden. Het hier getoonde patroon—laden, selecteren met CSS, itereren—blijft hetzelfde. + +**Q: Wat als ik de links moet aanpassen in plaats van ze alleen af te drukken?** +A: Nadat je elk `Element` hebt verkregen, kun je `link.attr("href", "newUrl")` aanroepen en vervolgens het document terug naar schijf schrijven met `Files.writeString`. + +## Conclusie + +Je weet nu hoe je **elementen op class** kunt **lezen uit een HTML‑bestand**, **externe links kunt vinden**, en **een NodeList in Java kunt itereren** met `querySelectorAll`‑achtige selectors. Het volledige voorbeeld toont een nette, productie‑klare workflow die je kunt integreren in grotere scraping‑ of transformatie‑pijplijnen. + +Vervolgens kun je gerelateerde onderwerpen verkennen, zoals **dynamische content parsen met HTMLUnit**, **gewijzigde HTML terug naar schijf schrijven**, of **Java‑streams gebruiken om link‑URL's in een lijst te verzamelen**. Elk van deze bouwt voort op de kerntechniek van class‑gebaseerde selectie die hier wordt gedemonstreerd. Veel programmeerplezier! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe HTML in Java te queryen – Elementen selecteren, filteren op attribuut, en tekst ophalen](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [NodeList Java itereren – HTML lezen & Image src ophalen](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [HTML‑documenten laden vanuit bestand in Aspose.HTML voor Java](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/java/css-html-form-editing/_index.md b/html/dutch/java/css-html-form-editing/_index.md index e0c54b0a26..0d3845fbdb 100644 --- a/html/dutch/java/css-html-form-editing/_index.md +++ b/html/dutch/java/css-html-form-editing/_index.md @@ -41,6 +41,7 @@ Ontdek hoe u CSS-bestanden in Java kunt lezen en verwerken met Aspose.HTML in de Leer hoe u HTML kunt parseren met Java, CSS‑eigenschappen kunt extraheren en de lettergrootte van elementen kunt bepalen. ### [HTML opvragen in Java – HTML laden, CSS-selectors gebruiken en koppen extraheren](./how-to-query-html-in-java-load-html-css-selector-and-extract/) Leer hoe u HTML kunt laden, CSS-selectors kunt toepassen en kopteksten kunt extraheren met Java. +### [Hoe CSS lezen vanuit HTML met Aspose.HTML in Java](./how-to-read-css-from-html-with-aspose-html-in-java/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/dutch/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/dutch/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..41a8bba190 --- /dev/null +++ b/html/dutch/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,269 @@ +--- +category: general +date: 2026-09-29 +description: Hoe CSS uit HTML te lezen met Aspose.HTML voor Java. Leer een element + te selecteren op ID, de berekende stijl op te halen, CSS‑eigenschappen te extraheren + en de achtergrondkleur weer te geven. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: nl +lastmod: 2026-09-29 +og_description: Hoe CSS uit HTML te lezen met Aspose.HTML voor Java. Stapsgewijze + instructies om een element op ID te selecteren, de berekende stijl op te halen, + CSS te extraheren en de achtergrondkleur weer te geven. +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: Hoe CSS uit HTML te lezen met Aspose.HTML – Java-gids +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: Hoe CSS uit HTML te lezen met Aspose.HTML in Java +url: /nl/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe CSS uit HTML te lezen met Aspose.HTML in Java + +Als je **hoe css te lezen** uit een HTML‑bestand in een Java‑applicatie moet lezen, laat deze gids je precies zien hoe. Aan het einde van de eerste twee zinnen weet je hoe je een element op id selecteert, de berekende stijl opvraagt en de achtergrondkleur weergeeft — allemaal met Aspose.HTML. + +We lopen stap voor stap door het laden van een HTML‑document, het vinden van een specifiek element, het extraheren van de berekende CSS en het afdrukken van de achtergrond‑kleurwaarde. Er zijn geen externe tools nodig, behalve de Aspose.HTML for Java‑bibliotheek, en de code werkt met Java 8+. + +## Wat je zult leren + +* Hoe CSS uit een HTML‑document te lezen met Aspose.HTML. +* Hoe je **element op id selecteert** met `querySelector`. +* Hoe je **berekende stijl opvraagt** voor elk DOM‑knooppunt. +* Hoe je **CSS uit HTML extraheert** en individuele eigenschappen leest, zoals **achtergrondkleur weergeven**. +* Veelvoorkomende valkuilen en best‑practice‑tips voor betrouwbare CSS‑extractie. + +### Vereisten + +* Java 8 of nieuwer geïnstalleerd. +* Maven of Gradle om de Aspose.HTML‑afhankelijkheid te beheren. +* Een eenvoudig HTML‑bestand (bijv. `input.html`) dat een element bevat met een `id`‑attribuut dat je wilt inspecteren. + +--- + +## Stap 1: Laad het HTML‑document (hoe css te lezen) + +De eerste handeling in elke CSS‑leesworkflow is het laden van de bron‑HTML. Aspose.HTML biedt de `HTMLDocument`‑klasse die het bestand parseert en een DOM opbouwt die je kunt bevragen. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Waarom dit belangrijk is:** Het laden van het document creëert een volledige DOM, waardoor betrouwbare stijlberekening mogelijk is die overeenkomt met wat een browser zou produceren. Het overslaan van deze stap laat je achter met ruwe tekst in plaats van een gestructureerd document. + +--- + +## Stap 2: Selecteer element op id + +Om CSS voor een specifiek knooppunt te extraheren, heb je eerst een referentie naar dat knooppunt nodig. De `querySelector`‑methode accepteert elke CSS‑selector, waardoor hij perfect is voor selecteren op ID. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Waarom `querySelector` gebruiken?:** Het volgt dezelfde selector‑syntaxis die je in CSS gebruikt, zodat je vertrouwde patronen zoals `#myDiv`, `.className` of attribuut‑selectors kunt hergebruiken zonder extra parse‑logica. + +--- + +## Stap 3: Haal berekende stijl van het element op + +Zodra je het element hebt, kan Aspose.HTML de **berekende stijl** berekenen — de uiteindelijke waarden na alle CSS‑regels, overerving en standaardwaarden. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Waarom de stijl berekenen?:** De berekende stijl weerspiegelt de werkelijke waarden die de browser zou renderen, niet alleen de ruwe declaraties. Dit is essentieel wanneer je de effectieve `background-color`, `font-size` of een andere eigenschap moet weten. + +--- + +## Stap 4: Extraheer CSS‑eigenschap en toon achtergrondkleur + +Nu je de `StyleDeclaration` hebt, kun je elke CSS‑eigenschap lezen. In dit voorbeeld richten we ons op **achtergrondkleur weergeven**, maar dezelfde aanpak werkt voor `font-size`, `margin`, enz. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**Verwachte output** + +``` +Background color: rgb(255, 0, 0) +``` + +Als het element zijn achtergrond erft van een ouder of een stylesheet, zal de berekende waarde die overerving al bevatten. + +## Omgaan met randgevallen en variaties + +### Element niet gevonden +Als `querySelector` `null` retourneert, geeft de bovenstaande code al een foutmelding weer en stopt. In productie wil je misschien een aangepaste uitzondering gooien of terugvallen op een standaard‑element. + +### Meerdere elementen met dezelfde ID (ongeldige HTML) +Hoewel ID's uniek moeten zijn, kan slecht gevormde HTML duplicaten bevatten. `querySelector` retourneert de eerste overeenkomst. Om alle overeenkomsten te verwerken, gebruik je `querySelectorAll` en itereren over de resulterende `NodeList`. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Verschillende CSS‑eigenschappen +Om **css uit html te extraheren** naast de achtergrondkleur, roep je simpelweg de juiste getter aan op `StyleDeclaration`. Veelvoorkomende getters zijn: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +Als een eigenschap niet expliciet is ingesteld, retourneert de getter de berekende standaard (bijv. `display: block` voor een `
`). + +### Browser‑specifieke prefixes +Aspose.HTML normaliseert vendor‑prefixed eigenschappen (bijv. `-webkit-transform`) naar hun standaardequivalenten wanneer mogelijk. Als je de ruwe waarde nodig hebt, kun je de `StyleDeclaration`‑map direct bevragen: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +## Volledig uitvoerbaar voorbeeld + +Hieronder staat een zelfstandige Java‑klasse die alle stappen samenvoegt. Vervang `YOUR_DIRECTORY/input.html` door het pad naar je HTML‑bestand. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**Het programma uitvoeren** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +Je zou de achtergrondkleur in de console moeten zien afgedrukt, wat bevestigt dat je succesvol **hoe css te lezen**, **element op id selecteert**, **berekende stijl opvraagt**, en **achtergrondkleur weergeeft**. + +## Best‑practice‑tips (pro‑tips) + +* **Cache de `HTMLDocument`** als je CSS uit veel elementen moet lezen; het herhaaldelijk parseren van het bestand schaadt de prestaties. +* **Valideer de HTML** vóór het laden — slecht gevormde markup kan leiden tot ontbrekende knooppunten of onjuiste berekende waarden. +* **Gebruik try‑with‑resources** (of expliciete `dispose`) om native resources die door Aspose.HTML‑objecten worden vastgehouden vrij te geven. +* **Log de volledige `StyleDeclaration`** bij het debuggen van complexe stijlen: `System.out.println(computedStyle.getCssText());` geeft je een momentopname van elke berekende eigenschap. + +## Conclusie + +Je weet nu **hoe je CSS** uit een HTML‑bestand in Java kunt lezen met Aspose.HTML. Door het document te laden, **element op id te selecteren**, **de berekende stijl op te vragen**, en de **achtergrond‑kleur**‑eigenschap te extraheren, kun je programmatisch elke stylinginformatie inspecteren die een browser zou toepassen. + +Vanaf hier kun je de oplossing uitbreiden om andere CSS‑attributen te extraheren, meerdere elementen te verwerken, of de gegevens te integreren in een UI‑testframework. + +Veel plezier met coderen, en voel je vrij om te experimenteren met verschillende selectors en stijl‑eigenschappen om aan de behoeften van je project te voldoen! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap‑uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Hoe CSS op te halen in Java – Berekende stijl ophalen met Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [hoe css te lezen in Java – Complete gids met Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Berekende stijl ophalen Java – Achtergrondkleur extraheren uit HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/dutch/java/editing-html-documents/_index.md b/html/dutch/java/editing-html-documents/_index.md index 6f121bf925..a28c3c586a 100644 --- a/html/dutch/java/editing-html-documents/_index.md +++ b/html/dutch/java/editing-html-documents/_index.md @@ -66,6 +66,7 @@ Leer hoe u de h1-tekst in een MHTML-bestand kunt aanpassen met Aspose.HTML voor ### [Fixed thread pool Java – Parallelle HTML-reiniging met ExecutorService](./fixed-thread-pool-java-parallel-html-cleaning-with-executors/) ### [Kind toevoegen aan body in Java – volledige Aspose.HTML-tutorial](./append-child-to-body-in-java-full-aspose-html-tutorial/) Leer hoe u een kind-element aan de body van een HTML-document toevoegt met Aspose.HTML voor Java. +### [Hoe de achtergrondkleur te wijzigen met JavaScript in Java](./how-to-change-background-color-javascript-using-java/) {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/dutch/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/dutch/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..f3372ffdc4 --- /dev/null +++ b/html/dutch/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,246 @@ +--- +category: general +date: 2026-09-29 +description: Achtergrondkleur wijzigen met JavaScript in een HTML‑bestand via Java. + Leer hoe je HTML in Java laadt, JavaScript in HTML uitvoert en HTML met Java aanpast + voor een nieuwe paginabackground. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: nl +lastmod: 2026-09-29 +og_description: Verander de achtergrondkleur met JavaScript in een HTML‑pagina met + Java. Deze tutorial laat zien hoe je HTML in Java laadt, JavaScript in HTML uitvoert + en de achtergrond van de pagina programmeerbaar instelt. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: Achtergrondkleur wijzigen met JavaScript en Java – stapsgewijze handleiding +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: Hoe de achtergrondkleur te wijzigen in JavaScript met Java +url: /nl/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hoe de achtergrondkleur te wijzigen met JavaScript in Java + +Als je de **change background color javascript** in een bestaand HTML‑bestand wilt wijzigen, kun je dat volledig vanuit Java doen zonder een browser te openen. Deze tutorial laat zien hoe je **load html in java** kunt uitvoeren, een klein JavaScript‑fragment kunt uitvoeren, en vervolgens **modify html with java** zodat de achtergrond van de pagina wordt bijgewerkt. + +De oplossing werkt met de open‑source **HTMLUnit**‑bibliotheek, die een headless‑browser biedt die JavaScript kan evalueren precies zoals een echte browser dat zou doen. Aan het einde van deze gids heb je een herbruikbare methode die **sets page background** naar elke gewenste kleur. + +## Prerequisites + +| Wat je nodig hebt | Waarom het belangrijk is | +|-------------------|--------------------------| +| Java 8 of nieuwer | HTMLUnit vereist minimaal Java 8. | +| Maven‑ of Gradle‑buildtool | Om de HTMLUnit‑dependency automatisch te downloaden. | +| Een HTML‑bestand dat je wilt bewerken (bijv. `input.html`) | Het bron‑document dat geladen en aangepast zal worden. | + +Add HTMLUnit to your project: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Pro tip:** Gebruik de nieuwste stabiele versie van HTMLUnit om de meest nauwkeurige JavaScript‑engine te krijgen. + +## Change background color javascript – HTML laden in Java + +De eerste stap is het laden van het HTML‑document in een `HTMLPage`‑object. Dit geeft je een DOM‑achtige API en een JavaScript‑uitvoeringscontext. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Waarom dit belangrijk is*: `WebClient` creëert een geïsoleerde omgeving waar JavaScript kan draaien, zodat je **run js in html** precies kunt uitvoeren zoals de browser van een gebruiker dat zou doen. + +## Run js in html om de pagina‑achtergrond in te stellen + +Zodra de pagina is geladen, kun je elke JavaScript‑expressie evalueren. Het fragment hieronder wijzigt de `backgroundColor`‑stijl van het ``‑element. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Uitleg*: +- `document.body.style.backgroundColor` is de standaard DOM‑eigenschap voor de achtergrond van de pagina. +- Door `eval` aan te roepen, **run js in html** we zonder een echte browser‑venster. +- De methode is herbruikbaar voor elke kleur, waardoor aan de **set page background**‑vereiste wordt voldaan. + +## Modify html with java en sla het resultaat op + +Nadat het script is uitgevoerd, weerspiegelt de DOM de nieuwe stijl. Je kunt nu de bijgewerkte HTML terug naar schijf schrijven. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +Alles samenvoegen geeft je een enkel, uitvoerbaar programma: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### Verwachte output + +Het uitvoeren van het programma geeft het volgende weer: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +Het openen van `js_modified.html` in een browser toont de pagina met een lichtblauwe achtergrond, wat bevestigt dat de **change background color javascript**‑operatie geslaagd is. + +## Veelvoorkomende variaties en randgevallen + +| Situatie | Hoe aan te pakken | +|----------|-------------------| +| **Verschillende kleurformaten** | Geef elke CSS‑compatibele waarde door (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **Ontbrekende ``‑tag** | Het script zal stilletjes falen; je kunt eerst zorgen dat `` bestaat met `page.getFirstByXPath("//body")`. | +| **Grote HTML‑bestanden** | Schakel CSS uit (`setCssEnabled(false)`) en schakel alleen de JavaScript‑functies in die je nodig hebt om het geheugenverbruik te verminderen. | +| **Meerdere scripts uitvoeren** | Roep `changeBackground` herhaaldelijk aan of maak een hulpfunctie die een lijst met JavaScript‑commando's accepteert. | + +## Conclusie + +Je weet nu hoe je **change background color javascript** kunt uitvoeren door een HTML‑bestand in Java te laden, **run js in html**, en **modify html with java** om **set page background** naar elke gewenste kleur te zetten. Het volledige voorbeeld hierboven werkt met de nieuwste HTMLUnit‑bibliotheek en kan worden geïntegreerd in grotere automatiserings‑pipelines, zoals batch‑verwerking van HTML‑rapporten of het voorbereiden van e‑mail‑templates. + +**Volgende stappen** +- Verken andere DOM‑manipulaties (bijv. elementen invoegen, scripts verwijderen). +- Combineer deze aanpak met een PDF‑renderer om PDF‑bestanden van de gestylede pagina's te genereren. +- Probeer een andere headless‑engine zoals Selenium WebDriver als je volledige browser‑nauwkeurigheid nodig hebt. + +Veel programmeerplezier! + +## Wat moet je hierna leren? + +De volgende tutorials behandelen nauw verwante onderwerpen die voortbouwen op de technieken die in deze gids worden getoond. Elke bron bevat volledige werkende code‑voorbeelden met stap‑voor‑stap uitleg om je te helpen extra API‑functies onder de knie te krijgen en alternatieve implementatie‑benaderingen in je eigen projecten te verkennen. + +- [Get Computed Style Java – Haal achtergrondkleur uit HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [Hoe HTML te laden, apparaat‑DPI in te stellen & achtergrondkleur te lezen](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [HTML genereren vanuit JavaScript in Java – Complete stapsgewijze gids](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/configuring-environment/_index.md b/html/english/java/configuring-environment/_index.md index 0af042050a..d643d2517d 100644 --- a/html/english/java/configuring-environment/_index.md +++ b/html/english/java/configuring-environment/_index.md @@ -53,6 +53,9 @@ If your HTML references external resources (CSS, JavaScript, images), you need a [Learn how to set up a network service in Aspose.HTML for Java.](./setup-network-service/) +### [Set custom user agent and screen dimensions in Aspose.HTML for Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Learn how to set a custom user agent and define screen dimensions in Aspose.HTML for Java to control rendering and resource loading. + ## How to Configure the Runtime Service Dynamic HTML often contains scripts that must run before rendering. The runtime service controls script execution, letting you limit CPU usage, set timeouts, and prevent infinite loops—crucial for stable, high‑performance conversions. @@ -104,6 +107,8 @@ Learn how to configure fonts in Aspose.HTML for Java with this detailed, step-by Learn how to use message handlers in Aspose.HTML for Java to handle missing images and other network operations effectively. ### [Set Up Network Service in Aspose.HTML for Java](./setup-network-service/) Learn how to set up a network service in Aspose.HTML for Java, manage network resources, and convert HTML to PNG with custom error handling. +### [Set custom user agent and screen dimensions in Aspose.HTML for Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Learn how to set a custom user agent and define screen dimensions in Aspose.HTML for Java to control rendering and resource loading. ### [Configure Runtime Service in Aspose.HTML for Java](./configure-runtime-service/) Learn how to configure the Runtime Service in Aspose.HTML for Java to optimize script execution, preventing infinite loops, and improving application performance. ### [Implement Sandboxing in Aspose.HTML for Java](./implement-sandboxing/) diff --git a/html/english/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/english/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..aef9d15dd9 --- /dev/null +++ b/html/english/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,193 @@ +--- +category: general +date: 2026-09-29 +description: Set custom user agent in Aspose.HTML for Java and learn how to set virtual + screen size for accurate HTML rendering. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: en +lastmod: 2026-09-29 +og_description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Set custom user agent and screen dimensions in Aspose.HTML for Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Set custom user agent and screen dimensions in Aspose.HTML for Java +url: /java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Set custom user agent and screen dimensions in Aspose.HTML for Java + +If you need to **set custom user agent** while rendering HTML with Aspose.HTML for Java, this guide shows you exactly how to do it. By configuring a sandbox you also get the ability to **set virtual screen size**, ensuring the layout matches a real browser viewport. + +You’ll finish this tutorial with a complete, runnable program that **specifies user agent**, **sets screen width**, and **sets screen height**. No external tools are required—just Aspose.HTML for Java and a Java 8+ runtime. + +## What you’ll learn + +* How to create a `SandboxConfiguration` to isolate rendering. +* How to **set custom user agent** and why it matters for responsive pages. +* How to **set virtual screen size** (screen width and height) for accurate layout. +* How to load an HTML file in the sandbox and save the processed result. +* Common pitfalls and best‑practice tips for sandboxed rendering. + +> **Prerequisites** – You need a valid Aspose.HTML for Java license, Java 8 or newer, and an IDE (IntelliJ IDEA, Eclipse, or VS Code). The example uses a local `input.html` file, but any reachable URL works. + +![Sandbox flow diagram](sandbox-flow.png "set custom user agent example in Java") + +## Step 1: Create a sandbox configuration (the foundation) + +The sandbox isolates the rendering environment from the host JVM, which is essential when you want to **set custom user agent** or change the viewport size. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Why this step?* +`SandboxConfiguration` holds all rendering options, including **screen dimensions** and **user‑agent** strings. By configuring it before loading the document, you guarantee that the HTML engine respects those settings from the first request. + +## Step 2: Set screen dimensions to mimic a real device + +Responsive sites often read `window.innerWidth` and `window.innerHeight`. To make the engine think it runs on a 1024 × 768 screen, you **set virtual screen size**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Why this matters* – If you omit **set screen dimensions**, the renderer may default to a tiny viewport, causing CSS media queries to pick the mobile layout. By explicitly **set screen width** and **set screen height**, you control which CSS rules fire. + +## Step 3: Specify a custom user‑agent string + +Some web pages deliver different content based on the user‑agent header. To **specify user agent** you simply set it on the sandbox configuration: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Why use a custom user agent?* +A custom string can bypass bot detection, trigger desktop‑only features, or test how a site behaves for a specific browser version. The Aspose engine forwards this value with every HTTP request made while loading external resources (CSS, images, scripts). + +## Step 4: Load the HTML document inside the sandbox + +Now that the sandbox is fully configured, load the HTML file. The constructor that takes a file path and a `SandboxConfiguration` automatically applies all the settings we defined. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +If you need to load from a remote URL, replace the file path with the URL string—Aspose.HTML will still respect the **set custom user agent** and **screen dimensions**. + +## Step 5: Save the processed output + +After the document finishes loading, you can save it in any supported format. Here we write a sandboxed HTML file that reflects any DOM changes caused by the custom settings. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +The saved file will contain the same markup, but any scripts that queried `navigator.userAgent` or inspected `window.innerWidth` will now see the values you supplied. + +## Full, runnable example + +Putting all steps together gives you a self‑contained program you can copy, paste, and run. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Expected output + +Running the program creates `sandboxed_output.html`. If you open it in a browser and inspect `navigator.userAgent` via the console, you’ll see **AsposeHTML/1.0**. Likewise, `window.innerWidth` will report **1024**, confirming that **set screen dimensions** worked as intended. + +## Common questions & edge‑case handling + +| Question | Answer | +|----------|--------| +| **What if the page loads additional resources from a different domain?** | The sandbox forwards the **custom user agent** with every request, but cross‑origin policies still apply. Use `sandboxConfig.setAllowCrossDomain(true)` if you need to relax those restrictions. | +| **Can I change the screen size after the document is loaded?** | No. Screen dimensions are read during the initial layout pass. To render with a different size, create a new `SandboxConfiguration` and reload the document. | +| **Do I need to call `document.close()`?** | The `HTMLDocument` implements `AutoCloseable`. Using a try‑with‑resources block ensures proper cleanup, but explicit `close()` is optional in simple scripts. | +| **How does this differ from setting a user‑agent in an HTTP client?** | Setting the user‑agent on the sandbox affects **all** resource requests made by the HTML engine, not just the initial HTML fetch. This mimics a real browser more closely. | +| **Is the sandbox safe for untrusted HTML?** | Yes. The sandbox isolates file system access and limits network calls according to the configuration, reducing the risk of malicious scripts affecting your host JVM. | + +## Pro tips + +* **Reuse configurations** – If you render many pages with the same viewport, create a single `SandboxConfiguration` and reuse it to avoid object‑creation overhead. +* **Debug with logging** – Enable Aspose.HTML logging (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) to see which resources were fetched with the custom user‑agent. +* **Combine with CSS media queries** – By adjusting **set screen width** you can test how your responsive design behaves on tablets, phones, or large desktops without opening a real browser. + +## Conclusion + +You now know how to **set custom user agent** and **set screen dimensions** when rendering HTML with Aspose.HTML for Java. By configuring a sandbox, you isolate the environment, control the viewport, and ensure that external resources see the exact headers you specify. This technique is essential for testing responsive layouts, bypassing bot blocks, or reproducing desktop‑only features in automated pipelines. + +Next, you might explore **how to set custom cookies** or **capture rendered screenshots** using Aspose.HTML’s rendering API—both concepts build on the same sandbox configuration pattern you just mastered. + +Happy coding! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [High DPI Rendering in Java – Capture Webpage Screenshots with Custom User Agent](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Create HTML File Java & Set Up Network Service (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/og-image.png b/html/english/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..da1a7681adfffa70df308400577060434ec1bd85 GIT binary patch literal 45697 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

r|ny2s@fLet;cvRuM(7_$`guV z70XxD61LBL?K^t$NS8OavDc!dYKUOIp^ z%g$;|B7O(vTODUV#a=PL+`+wW9m|a^BMhhP^-@1~4KgJ{65%ngH#7#$NBE`yd*ZLQ z%oygC4CQ68c8J$zSQ8K5Ro2mwy#i?*&k*YPKA@sT46fgG?wBDTd2P8l2AQ?v>Fr;C z3@bi}=5}Ivj|bT(a68^rBXboCXP<^0ZKw(dN<0WgJmuV*Aazm8GFPjXEiWq@tz28k zU!sNmNE1tiz^%s1EZ37p&>TWs7_+s6{lR>9`GxO*XQo$Io{%>6Xr#((C~3h|@nUFN znp?vWs*2`BBH5+?F*`f|)&$jfJo~iigr^TX$E#adI$ZgL^QMhRNRXTSu5;AU46)JOQxDr$=CM^_0>->*zRMzpHv#y ze{F~>VP@Hc16`k~&ksl!58ft>wcMDUCu7SU3Z11JaN^X5c@8_u43!N7Q1o83NP zv8xO1QyVGo!QGg2k5Z|oIs6y%(ECBIk_NgX$Y_D;WCsJA^Z@xnM5+-QzQnt)Ns2^r2d+fM53>ms?jL74{Z%i573<5Gik*821T3+wP z%_5M=K7MsUugn>1eFUPKttYBdx1|}QEe4aW)Sc|;$k*LHTS>;kU@O*_*<<{$2`yW_Z9Q`Zc}D+BfU6{5>AWRty)?O-h$?O1o6n!R_lyKS^v(vu7s+&M$8@f#c_uts4Y z5Ka}_F{cw=86S^GjNMop;Kg$^fv%1^r#$lXJe*2xX$kYwiY^Qf&ifH*2b?OE-2Itt z_CL3>Dly}N_WFqddVyg`c6t3#pi~@N#>I(_zC904t?go7zZc;b#ERstQOUZ!idO6$ zQ`d`&Rnby8JrHyG4z;2*$E>}D%{p$Thz3Z|Gq>~TlPYGXv*LDHK-*2oeE=EWhlSW6IFAbG#jCoB>8}Hzq7iwnhFf!4lmr9G1mP{61 z876uzQw$Cqb{UFuU-m!o@%ub~fkMeW>EZu*{RLn0^`AJ?|5p&;9Kiv{dBnl_@dsG= dPvD52-7}W?L#bE;iJyp-q^R7Bd|~}J{{f>4T#5hy literal 0 HcmV?d00001 diff --git a/html/english/java/creating-managing-html-documents/_index.md b/html/english/java/creating-managing-html-documents/_index.md index 22023802b0..d9cc975a25 100644 --- a/html/english/java/creating-managing-html-documents/_index.md +++ b/html/english/java/creating-managing-html-documents/_index.md @@ -39,7 +39,7 @@ When it comes to generating new HTML documents, Aspose.HTML for Java offers a ro ## Managing SVG Documents and Handling Events -Finally, for those looking to push their skills even further, there’s a wealth of advanced topics to explore. Learn how to manage SVG documents or handle document load events to create responsive and dynamic web applications. These tutorials take you beyond HTML, diving into the intricacies of Scalable Vector Graphics (SVG) and event-driven programming. [Read more](./create-manage-svg-documents/) +Finally, for those looking to push their skills even further, there’s a wealth of advanced topics to explore. Learn how to manage SVG documents or handle document load events to create responsive and dynamic web applications. These tutorials take you beyond HTML, diving into the intricacies of Scalable Vector Graphics (SVG) and event‑driven programming. [Read more](./create-manage-svg-documents/) ## Creating and Managing HTML Documents in Aspose.HTML for Java Tutorials @@ -56,6 +56,8 @@ Learn how to load, manipulate, and save HTML documents using Aspose.HTML for Jav Learn how to load HTML documents from streams using Aspose.HTML for Java. This guide provides a step-by-step tutorial for seamless HTML manipulation. ### [Create HTML Documents from String in Aspose.HTML for Java](./create-html-documents-from-string/) Learn how to create HTML documents from strings in Aspose.HTML for Java with this step-by-step guide. +### [How to create HTML element in Java using Aspose.HTML](./how-to-create-html-element-in-java-using-aspose-html/) +Learn how to create HTML elements in Java using Aspose.HTML with a step-by-step guide. ### [Create HTML Document with Java – Fetch JSON and Generate Content](./create-html-document-with-java-fetch-json-and-generate-conte/) Learn how to fetch JSON in Java and generate HTML content using Aspose.HTML with this step-by-step guide. ### [How to Query HTML in Java – Complete Tutorial](./how-to-query-html-in-java-complete-tutorial/) @@ -76,12 +78,16 @@ Learn how to execute asynchronous JavaScript in Java using Aspose.HTML with this Learn to create and manage SVG documents using Aspose.HTML for Java! This comprehensive guide covers everything from basic creation to advanced manipulation. ### [How to Parse HTML Java – Load, Query & Count Elements](./how-to-parse-html-java-load-query-count-elements/) Learn to load HTML, query elements, and count them using Aspose.HTML for Java in this comprehensive step-by-step guide. +### [How to count HTML elements in Java with XPath](./how-to-count-html-elements-in-java-with-xpath/) +Learn how to count HTML elements using XPath queries in Java with Aspose.HTML. Step-by-step guide for precise element counting. ### [Load HTML Document Java – Complete Guide with XPath & CSS](./load-html-document-java-complete-guide-with-xpath-css/) Learn how to load HTML documents in Java using Aspose.HTML, with comprehensive XPath and CSS selectors guide. -### [count html characters in Java – Full Guide with Aspose HTML](./count-html-characters-in-java-full-guide-with-aspose-html/) +### [count html characters in Java – Full Guide](./count-html-characters-in-java-full-guide-with-aspose-html/) Learn how to count HTML characters in Java using Aspose.HTML with this comprehensive step‑by‑step guide. ### [Extract Text from HTML in Java – Complete Programming Guide](./extract-text-from-html-in-java-complete-programming-guide/) -Learn how to extract text from HTML using Aspose.HTML for Java with this comprehensive step-by-step programming guide. +Learn how to extract text from HTML using Aspose.HTML for Java with this comprehensive step‑by‑step programming guide. +### [How to select elements by class in Java using querySelectorAll](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Learn how to select HTML elements by class in Java using Aspose.HTML's querySelectorAll method. {{< /blocks/products/pf/tutorial-page-section >}} @@ -101,11 +107,11 @@ Learn how to iterate a NodeList in Java to read HTML and extract image src attri ### [Iterate over NodeList Java – Complete Guide](./iterate-over-nodelist-java-complete-guide/) Learn how to iterate over a NodeList in Java using Aspose.HTML with this comprehensive step-by-step guide. ### [Extract text from HTML with Java – Complete Step‑by‑Step Guide](./extract-text-from-html-with-java-complete-step-by-step-guide/) -Learn how to extract text from HTML using Aspose.HTML for Java with this comprehensive step-by-step tutorial. +Learn how to extract text from HTML using Aspose.HTML for Java with this comprehensive step‑by‑step tutorial. {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/english/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..78189919f0 --- /dev/null +++ b/html/english/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-09-29 +description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: en +lastmod: 2026-09-29 +og_description: How to count HTML elements in Java using Aspose.HTML. Follow this + complete tutorial to load an HTML document, select nodes with XPath, evaluate XPath + in Java, and get a node list. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: How to count HTML elements in Java – step‑by‑step guide +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: How to count HTML elements in Java with XPath +url: /java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to count HTML elements in Java with XPath + +If you need to **how to count HTML elements** in a web page from a Java application, this guide gives you a complete, ready‑to‑run solution. By the end of the first two sentences you’ll know exactly how to load an HTML document, select nodes with XPath, and retrieve a node list that you can count. + +We’ll use the Aspose.HTML for Java library because it provides a DOM‑compatible API and a powerful XPath engine. The tutorial covers everything you need—imports, code, explanations, and expected output—so you can copy the example into your project and see results instantly. Along the way we’ll also touch on **select nodes with XPath**, **get node list Java**, **load HTML document Java**, and **evaluate XPath in Java**. + +## What you’ll achieve + +* Load an HTML file from the file system. +* Create an XPath expression that targets specific elements. +* Evaluate the XPath expression against the document. +* Retrieve a `NodeList` and count how many matching elements exist. + +No external services or complex configuration are required; just the Aspose.HTML JAR on your classpath. + +--- + +## How to count HTML elements with XPath in Java + +This step‑by‑step section shows the exact code you need. Each subsection corresponds to a logical part of the process, making it easy to adapt or extend. + +### Step 1: Load the HTML document in Java + +First, bring the HTML file into memory. The `HTMLDocument` class parses the file and builds a DOM tree that XPath can query. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Why this matters:** +Loading the document creates a DOM representation, which is required for any XPath evaluation. If the file path is wrong, Aspose.HTML throws a `FileNotFoundException`, so double‑check the location of `input.html`. + +### Step 2: Create and evaluate an XPath expression + +Now we build an XPath that selects the elements we want to count. In this example we count all `` tags whose `alt` attribute equals `"logo"`. + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Why this matters:** +The expression `//img[@alt='logo']` is a concise way to **select nodes with XPath**. The `evaluate` call **evaluate XPath in Java** and returns a generic `XPathResult`. Casting to `NodeList` gives us direct access to the collection of matching nodes. + +### Step 3: Retrieve and count the node list + +Finally, we count how many nodes were returned. The `NodeList` API provides `getLength()` for this purpose. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Why this matters:** +`getLength()` is the simplest way to **get node list Java** and obtain a count. If the XPath matches no elements, the length will be `0`, which your application can handle gracefully. + +### Full runnable example + +Below is the complete program, including all imports and a minimal `main` method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML JAR to your project, and run it. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Expected output** + +If `input.html` contains three `logo` tags, the program prints: + +``` +Found 3 logo images. +``` + +If no such images exist, it prints: + +``` +Found 0 logo images. +``` + +--- + +## Common variations and edge cases + +| Situation | What to change | Reason | +|-----------|----------------|--------| +| Count a different element (e.g., `
` with class `header`) | Change the XPath to `//div[@class='header']` | XPath syntax lets you target any tag/attribute. | +| Count all elements regardless of attribute | Use `//*` as the XPath expression | `//*` selects every element node in the document. | +| Large documents causing memory pressure | Use a streaming parser or evaluate XPath on a fragment | Aspose.HTML offers `HTMLDocumentFragment` for partial parsing. | +| Need the actual nodes, not just the count | Iterate over `nodes.item(i)` | You can process each node after counting. | + +**Pro tip:** Always validate the XPath string before passing it to `createXPathExpression`. An invalid expression throws `XPathException`, which you can catch to provide a friendly error message. + +--- + +## Troubleshooting checklist + +1. **Library not found** – Ensure the Aspose.HTML for Java JAR is on the classpath (`-cp` or your IDE’s dependencies). +2. **File not found** – Verify that `input.html` is located relative to the working directory or use an absolute path. +3. **Zero results** – Double‑check the attribute values and case sensitivity (`alt='logo'` vs `alt='Logo'`). XPath is case‑sensitive. +4. **Performance concerns** – Reuse a single `HTMLDocument` instance if you need to run many XPath queries on the same file. + +--- + +## Conclusion + +You now know **how to count HTML elements** in Java using Aspose.HTML and XPath. By loading the HTML document, creating an XPath expression, **evaluating XPath in Java**, and retrieving a **node list**, you can quickly determine the number of matching elements. This technique works for any tag or attribute, making it a versatile tool for web‑scraping, automated testing, or content analysis. + +Next steps you might explore include: + +* Using **select nodes with XPath** to extract attribute values (e.g., image `src`). +* Combining multiple XPath queries to build a report of element statistics. +* Integrating this logic into a larger Java service that processes HTML files in bulk. + +Feel free to experiment with different XPath expressions and document structures—counting HTML elements is just the beginning! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to Parse HTML Java – Load, Query & Count Elements](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Load HTML Document Java – Complete Guide with XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/og-image.png b/html/english/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..9ee729c4813650e250b358de685c0acaf795cdeb GIT binary patch literal 44360 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 +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to create HTML element in Java using Aspose.HTML + +If you need to **create HTML element** in a Java application, this guide shows you a complete, runnable solution. You’ll see how to **add a paragraph**, set its text, and **append the element to the body** of an existing HTML file with Aspose.HTML. + +The tutorial covers everything from loading a document to saving the modified file, so you can copy the code into your own project without further research. + +## Prerequisites + +Before you start, make sure you have: + +* Java 17 or later installed. +* Aspose.HTML for Java 23.10 (or the latest version) added to your project’s classpath. +* A simple `input.html` file in a known directory. The file can be empty (``) or contain existing markup. + +## Step 1: Load the existing HTML document + +Loading the source file gives you a manipulable DOM tree. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +The `HTMLDocument` constructor parses the file and creates a live DOM. If the file cannot be read, Aspose.HTML throws an `IOException`; you can let the exception propagate or handle it with a try‑catch block. + +## Step 2: Create a new `

` element and add text to HTML + +Creating a new element is similar to using `document.createElement` in a browser. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` automatically creates a text node and attaches it to the element, which is the recommended way to **add text to HTML**. This method also escapes characters that could break the markup. + +## Step 3: Append element to body + +Now that the paragraph is ready, you need to place it inside the document’s ``. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` returns the `` node, and `appendChild` inserts the new `

` as the last child. If the document has no `` element (unlikely for a well‑formed HTML file), Aspose.HTML creates one automatically. + +## Step 4: Save the modified document + +Finally, write the updated DOM back to disk. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` serializes the DOM, preserving existing markup and adding the new paragraph. The resulting `output.html` will contain: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Full source code (java html example) + +Putting all steps together gives you a self‑contained program you can run immediately. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### What the code does + +| Step | Action | Why it matters | +|------|--------|----------------| +| Load document | `new HTMLDocument(...)` | Parses the source HTML into a DOM you can manipulate. | +| Create element | `doc.createElement("p")` | Mirrors the browser API, ensuring the element follows HTML standards. | +| Set text | `setTextContent(...)` | Guarantees proper escaping and avoids manual text‑node creation. | +| Append to body | `doc.getBody().appendChild(...)` | Places the new element where browsers will render it. | +| Save file | `doc.save(...)` | Persists changes, producing a valid HTML file ready for further use. | + +## Common variations and edge cases + +* **Adding multiple elements** – repeat steps 2‑3 for each new node before calling `save`. +* **Inserting before a specific node** – use `insertBefore(newNode, referenceNode)` instead of `appendChild`. +* **Working with fragments** – `doc.createDocumentFragment()` lets you build a group of nodes and attach them in one operation, which improves performance for large updates. +* **Handling UTF‑8 characters** – Aspose.HTML automatically writes UTF‑8; just ensure your source file is encoded the same way. + +## Practical tips + +* **Path handling** – Use `java.nio.file.Paths` to build platform‑independent file paths. +* **Exception safety** – Wrap the whole block in a try‑with‑resources statement if you need to close additional streams. +* **Performance** – For very large HTML files, consider loading the document with `HTMLDocument(String, LoadOptions)` where you can disable external resources to speed up parsing. + +## Verify the result + +After running the program, open `output.html` in any browser. You should see the paragraph “Added by Aspose.HTML” displayed where the original body ends. Inspect the page source to confirm that the `

` element is present inside ``. + +## Conclusion + +You now know how to **create HTML element** in Java, **add a paragraph**, **add text to HTML**, and **append element to body** using Aspose.HTML. The complete **java html example** demonstrates a clean, production‑ready workflow that you can extend to manipulate any part of an HTML document. + +Next, explore related topics such as **modifying attributes**, **removing nodes**, or **working with CSS styles** to build richer HTML processing pipelines. Happy coding! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [Create new html element with Java – Full Aspose.HTML Guide](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [append child to body in Java – Full Aspose.HTML Tutorial](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Append Element to Body with Aspose.HTML for Java using a DOM Mutation Observer](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/og-image.png b/html/english/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..c6bcb637a9eefc9669b0757bf38205919d596421 GIT binary patch literal 45725 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 literal 0 HcmV?d00001 diff --git a/html/english/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/english/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..c8396270c5 --- /dev/null +++ b/html/english/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-09-29 +description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: en +lastmod: 2026-09-29 +og_description: Select elements by class in Java, read HTML from file, and find external + links using querySelectorAll. Follow the full example to iterate a NodeList. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Select elements by class in Java – complete guide with querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: How to select elements by class in Java using querySelectorAll +url: /java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to select elements by class in Java using querySelectorAll + +If you need to **select elements by class** while processing an HTML file in Java, this guide shows you exactly how to do it. You’ll learn to read HTML from file, use `querySelectorAll` to find external links, and iterate the resulting `NodeList` safely. + +Working with HTML in Java often feels heavyweight, but modern libraries give you a concise, CSS‑selector‑based API. The example below uses **jsoup** (version 1.17.2) because it implements `querySelectorAll`‑style selectors and returns a `Elements` collection that behaves like a `NodeList`. You can adapt the same logic to other DOM implementations if needed. + +## Prerequisites + +Before you start, make sure you have: + +* JDK 17 or newer installed. +* Maven or Gradle for dependency management. +* Basic familiarity with Java streams and the DOM model. + +Add jsoup to your project: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## Step 1: Read HTML from file + +The first task is to load the HTML document from disk. `Jsoup.parse(Path, Charset)` reads the file and builds a DOM tree you can query. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Why this matters*: Loading the file once avoids repeated I/O while you iterate over elements later. The `Document` object holds the full DOM, enabling fast selector queries. + +## Step 2: Use `querySelectorAll` to select elements by class + +Now that the document is in memory, you can **select elements by class** using a CSS selector. The selector `"a.external"` matches `` tags that carry the `external` class—exactly what you need to **find external links**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Why this matters*: Using a class selector is both expressive and performant. The library translates the selector into an optimized traversal, so you don’t need to write manual loops over every node. + +## Step 3: Iterate the NodeList (Elements) in Java + +`Elements` implements `Iterable`, which means you can use a standard `for‑each` loop to **iterate NodeList Java** objects. The loop below prints each link’s `href` attribute. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Why this matters*: Direct iteration keeps the code readable and avoids the overhead of converting the collection to a stream when you only need simple output. + +## Full working example + +Putting the three steps together yields a self‑contained program you can run from the command line. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Expected output + +Assuming `input.html` contains: + +```html +Example +About +OpenAI +``` + +Running the program prints: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Pro tips and common pitfalls + +* **Encoding matters** – Always read the file with UTF‑8 (or the charset that matches your source). Incorrect encoding can corrupt characters in attribute values. +* **Multiple classes** – If an element has several classes (e.g., `class="btn external"`), the selector `"a.external"` still matches because CSS class selectors check for the presence of the token, not the exact string. +* **Performance tip** – If you only need the `href` attribute, you can request it directly with `doc.select("a.external[href]").eachAttr("href")`. This avoids creating full `Element` objects for each match. +* **Null safety** – `link.attr("href")` returns an empty string if the attribute is missing, so you don’t need a null check before printing. + +## Frequently asked questions + +**Q: Does this work with HTML fragments that lack a `` root?** +A: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds missing root elements, allowing selectors to work on the fragment’s body. + +**Q: Can I use `querySelectorAll` without jsoup?** +A: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. The pattern shown here—load, select with CSS, iterate—remains the same. + +**Q: What if I need to modify the links instead of just printing them?** +A: After obtaining each `Element`, you can call `link.attr("href", "newUrl")` and then write the document back to disk with `Files.writeString`. + +## Conclusion + +You now know how to **select elements by class**, **read HTML from file**, **find external links**, and **iterate a NodeList in Java** using `querySelectorAll`‑style selectors. The complete example demonstrates a clean, production‑ready workflow that you can embed in larger scraping or transformation pipelines. + +Next, explore related topics such as **parsing dynamic content with HTMLUnit**, **writing modified HTML back to disk**, or **using Java streams to collect link URLs into a list**. Each of these builds on the core technique of class‑based selection demonstrated here. Happy coding! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Iterate NodeList Java – Read HTML & Get Image src](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [Load HTML Documents from File in Aspose.HTML for Java](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/og-image.png b/html/english/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..d46cd21309c0a890aa50cf3fe6c599588054d169 GIT binary patch literal 50591 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�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 +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to read CSS from HTML with Aspose.HTML in Java + +If you need to **how to read css** from an HTML file in a Java application, this guide shows you exactly how. By the end of the first two sentences you’ll know how to select element by id, get computed style, and display background color—all with Aspose.HTML. + +We’ll walk through loading an HTML document, locating a specific element, extracting its computed CSS, and printing the background‑color value. No external tools are required beyond the Aspose.HTML for Java library, and the code works with Java 8+. + +## What you’ll learn + +* How to read CSS from an HTML document using Aspose.HTML. +* How to **select element by id** with `querySelector`. +* How to **get computed style** for any DOM node. +* How to **extract CSS from HTML** and read individual properties such as **display background color**. +* Common pitfalls and best‑practice tips for reliable CSS extraction. + +### Prerequisites + +* Java 8 or newer installed. +* Maven or Gradle to manage the Aspose.HTML dependency. +* A simple HTML file (e.g., `input.html`) that contains an element with an `id` attribute you want to inspect. + +--- + +## Step 1: Load the HTML document (how to read css) + +The first operation in any CSS‑reading workflow is to load the source HTML. Aspose.HTML provides the `HTMLDocument` class that parses the file and builds a DOM you can query. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Why this matters:** Loading the document creates a complete DOM, enabling reliable style computation that mirrors what a browser would produce. Skipping this step would leave you with raw text rather than a structured document. + +--- + +## Step 2: Select element by id + +To extract CSS for a specific node, you first need a reference to that node. The `querySelector` method accepts any CSS selector, making it perfect for selecting by ID. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Why use `querySelector`?:** It follows the same selector syntax you use in CSS, so you can reuse familiar patterns like `#myDiv`, `.className`, or attribute selectors without extra parsing logic. + +--- + +## Step 3: Get computed style of the element + +Once you have the element, Aspose.HTML can calculate the **computed style**—the final values after all CSS rules, inheritance, and defaults are applied. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Why compute the style?:** The computed style reflects the actual values the browser would render, not just the raw declarations. This is essential when you need to know the effective `background-color`, `font-size`, or any other property. + +--- + +## Step 4: Extract CSS property and display background color + +Now that you have the `StyleDeclaration`, you can read any CSS property. In this example we focus on **display background color**, but the same approach works for `font-size`, `margin`, etc. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**Expected output** + +``` +Background color: rgb(255, 0, 0) +``` + +If the element inherits its background from a parent or a stylesheet, the computed value will already include that inheritance. + +--- + +## Handling edge cases and variations + +### Element not found +If `querySelector` returns `null`, the code above already prints an error and exits. In production you might want to throw a custom exception or fallback to a default element. + +### Multiple elements with the same ID (invalid HTML) +Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` returns the first match. To process all matches, use `querySelectorAll` and iterate over the resulting `NodeList`. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Different CSS properties +To **extract css from html** beyond the background color, simply call the appropriate getter on `StyleDeclaration`. Common getters include: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +If a property isn’t explicitly set, the getter returns the computed default (e.g., `display: block` for a `
`). + +### Browser‑specific prefixes +Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) into their standard equivalents when possible. If you need the raw value, you can query the `StyleDeclaration` map directly: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +--- + +## Complete runnable example + +Below is a self‑contained Java class that ties all steps together. Replace `YOUR_DIRECTORY/input.html` with the path to your HTML file. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**Running the program** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +You should see the background color printed in the console, confirming that you have successfully **how to read css**, **select element by id**, **get computed style**, and **display background color**. + +--- + +## Best‑practice tips (pro tips) + +* **Cache the `HTMLDocument`** if you need to read CSS from many elements; parsing the file repeatedly hurts performance. +* **Validate the HTML** before loading—malformed markup can lead to missing nodes or incorrect computed values. +* **Use try‑with‑resources** (or explicit `dispose`) to free native resources held by Aspose.HTML objects. +* **Log the full `StyleDeclaration`** when debugging complex styles: `System.out.println(computedStyle.getCssText());` gives you a snapshot of every computed property. + +--- + +## Conclusion + +You now know **how to read CSS** from an HTML file in Java using Aspose.HTML. By loading the document, **selecting element by id**, **getting computed style**, and **extracting the background‑color** property, you can programmatically inspect any styling information that a browser would apply. + +From here you can expand the solution to extract other CSS attributes, handle multiple elements, or integrate the data into a UI‑testing framework. + +Happy coding, and feel free to experiment with different selectors and style properties to suit your project's needs! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to Get CSS in Java – Retrieve Computed Style with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [how to read css in Java – Complete Guide with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/og-image.png b/html/english/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..c97e1718c8b5a3066b37bcc4d357c8aec68c9860 GIT binary patch literal 50229 zcmbrm1yoes+c%7b2qK6yQqrw-gCLzcbd5Aacf;UKw@67#cXun@-6`GO3^Vf`^nTu0 z|Mk4@`o3?NwK#Il-e>P?U;B#R{#^zuD@tLa6QiS`pkT^KfB1xg^0*8I<)Jg$L*Oqz z-|S* zVKN-`^AzkN;fwAi}>e z|G9dJwJ2qSQ9<%VnuvjF<5x@tr>pp%)=Co}8t=kmqS!x?Z8K2)ZKr9GQBWND#yBf1 z2F7jt-web@nBgN*@mp$Q`=|duy7=#fG@+JV e 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%0D>K-22x-X=p0FxkB2soem`s|Vtg#JgnmG%t4 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

~U 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 literal 0 HcmV?d00001 diff --git a/html/english/java/editing-html-documents/_index.md b/html/english/java/editing-html-documents/_index.md index e86817ff2b..ef7f3bd92c 100644 --- a/html/english/java/editing-html-documents/_index.md +++ b/html/english/java/editing-html-documents/_index.md @@ -58,6 +58,8 @@ Learn how to add inline CSS to HTML documents using Aspose.HTML for Java. This s Learn how to manage inner and outer HTML properties in Aspose.HTML for Java with this step-by-step guide, perfect for web developers and content creators. ### [Implement Internal CSS in HTML Documents with Aspose.HTML for Java](./implement-internal-css-html-documents/) Learn to implement internal CSS in HTML documents using Aspose.HTML for Java with our easy step-by-step tutorial. +### [How to change background color javascript using Java](./how-to-change-background-color-javascript-using-java/) +Learn how to modify the background color of a webpage using JavaScript via Aspose.HTML for Java. ### [Change h1 Text in MHTML with Java – Full Step‑By‑Step Guide](./change-h1-text-in-mhtml-with-java-full-step-by-step-guide/) Learn how to change the h1 text in MHTML files using Aspose.HTML for Java with this comprehensive step‑by‑step guide. ### [Fixed thread pool java – Parallel HTML Cleaning with ExecutorService](./fixed-thread-pool-java-parallel-html-cleaning-with-executors/) diff --git a/html/english/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/english/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..9b2846fbec --- /dev/null +++ b/html/english/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,247 @@ +--- +category: general +date: 2026-09-29 +description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page background. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: en +lastmod: 2026-09-29 +og_description: Change background color javascript in an HTML page using Java. This + tutorial shows you how to load html in java, run js in html, and set page background + programmatically. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: Change background color javascript with Java – step‑by‑step guide +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: How to change background color javascript using Java +url: /java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# How to change background color javascript using Java + +If you need to **change background color javascript** in an existing HTML file, you can do it entirely from Java without opening a browser. This tutorial shows you how to **load html in java**, execute a small JavaScript snippet, and then **modify html with java** so the page’s background is updated. + +The solution works with the open‑source **HTMLUnit** library, which provides a headless browser that can evaluate JavaScript exactly as a real browser would. By the end of this guide you’ll have a reusable method that **sets page background** to any color you choose. + +## Prerequisites + +| What you need | Why it matters | +|---------------|----------------| +| Java 8 or newer | HTMLUnit requires at least Java 8. | +| Maven or Gradle build tool | To pull the HTMLUnit dependency automatically. | +| An HTML file you want to edit (e.g., `input.html`) | The source document that will be loaded and altered. | + +Add HTMLUnit to your project: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Pro tip:** Use the latest stable version of HTMLUnit to get the most accurate JavaScript engine. + +## Change background color javascript – load HTML in Java + +The first step is to load the HTML document into an `HTMLPage` object. This gives you a DOM‑like API and a JavaScript execution context. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Why this matters*: `WebClient` creates a sandboxed environment where JavaScript can run, so you can **run js in html** exactly as a user’s browser would. + +## Run js in html to set page background + +Once the page is loaded, you can evaluate any JavaScript expression. The snippet below changes the `backgroundColor` style of the `` element. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Explanation*: +- `document.body.style.backgroundColor` is the standard DOM property for the page’s background. +- By calling `eval`, we **run js in html** without needing a real browser window. +- The method is reusable for any color, fulfilling the **set page background** requirement. + +## Modify html with java and save the result + +After the script runs, the DOM reflects the new style. You can now write the updated HTML back to disk. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +Putting everything together gives you a single, runnable program: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### Expected output + +Running the program prints: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +Opening `js_modified.html` in any browser shows the page with a light blue background, confirming that the **change background color javascript** operation succeeded. + +## Common variations and edge cases + +| Situation | How to handle it | +|-----------|------------------| +| **Different color formats** | Pass any CSS‑compatible value (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **Missing `` tag** | The script will silently fail; you can first ensure `` exists with `page.getFirstByXPath("//body")`. | +| **Large HTML files** | Disable CSS (`setCssEnabled(false)`) and enable only the JavaScript features you need to reduce memory usage. | +| **Running multiple scripts** | Call `changeBackground` repeatedly or create a utility method that accepts a list of JavaScript commands. | + +## Conclusion + +You now know how to **change background color javascript** by loading an HTML file in Java, **run js in html**, and **modify html with java** to **set page background** to any color you choose. The complete example above works with the latest HTMLUnit library and can be integrated into larger automation pipelines, such as batch‑processing HTML reports or preparing email templates. + +**Next steps** +- Explore other DOM manipulations (e.g., inserting elements, removing scripts). +- Combine this approach with a PDF renderer to generate PDFs of the styled pages. +- Try using a different headless engine like Selenium WebDriver if you need full browser fidelity. + +Happy coding! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Generate HTML from JavaScript in Java – Complete Step‑by‑Step Guide](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/english/java/editing-html-documents/how-to-change-background-color-javascript-using-java/og-image.png b/html/english/java/editing-html-documents/how-to-change-background-color-javascript-using-java/og-image.png new file mode 100644 index 0000000000000000000000000000000000000000..054c0e050c01372b3babe3f2efd4dea6aa76198a GIT binary patch literal 47019 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 &* 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%0D8>M($zV3}$LWN!*q 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 literal 0 HcmV?d00001 diff --git a/html/french/java/configuring-environment/_index.md b/html/french/java/configuring-environment/_index.md index 4e3b222ae4..7b4c6890cd 100644 --- a/html/french/java/configuring-environment/_index.md +++ b/html/french/java/configuring-environment/_index.md @@ -55,6 +55,9 @@ Si votre HTML fait référence à des ressources externes (CSS, JavaScript, imag [Apprenez comment configurer un service réseau dans Aspose.HTML for Java.](./setup-network-service/) +### [Définir un agent utilisateur personnalisé et les dimensions d'écran dans Aspose.HTML for Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Apprenez comment définir un agent utilisateur personnalisé et spécifier les dimensions d'écran pour les rendus HTML avec Aspose.HTML for Java. + ## Comment configurer le service d'exécution Le HTML dynamique contient souvent des scripts qui doivent s’exécuter avant le rendu. Le service d’exécution contrôle l’exécution des scripts, vous permettant de limiter l’utilisation du CPU, de définir des délais d’attente et d’éviter les boucles infinies—crucial pour des conversions stables et performantes. @@ -111,6 +114,9 @@ Apprenez comment utiliser les gestionnaires de messages dans Aspose.HTML for Jav ### [Configurer le service réseau dans Aspose.HTML for Java](./setup-network-service/) Apprenez comment configurer un service réseau dans Aspose.HTML for Java, gérer les ressources réseau et convertir HTML en PNG avec une gestion d’erreurs personnalisée. +### [Définir un agent utilisateur personnalisé et les dimensions d'écran dans Aspose.HTML for Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Apprenez comment définir un agent utilisateur personnalisé et spécifier les dimensions d'écran pour les rendus HTML avec Aspose.HTML for Java. + ### [Configurer le Runtime Service dans Aspose.HTML for Java](./configure-runtime-service/) Apprenez comment configurer le Runtime Service dans Aspose.HTML for Java pour optimiser l’exécution des scripts, prévenir les boucles infinies et améliorer les performances de l’application. diff --git a/html/french/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/french/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..4a04ec8eb9 --- /dev/null +++ b/html/french/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,194 @@ +--- +category: general +date: 2026-09-29 +description: Définissez un agent utilisateur personnalisé dans Aspose.HTML pour Java + et apprenez comment définir la taille d'écran virtuelle pour un rendu HTML précis. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: fr +lastmod: 2026-09-29 +og_description: Définissez un agent utilisateur personnalisé dans Aspose.HTML pour + Java et apprenez comment définir la taille d’écran virtuelle pour un rendu HTML + précis. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Définir un agent utilisateur personnalisé et les dimensions de l'écran dans + Aspose.HTML pour Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Définir un agent utilisateur personnalisé et les dimensions de l'écran dans + Aspose.HTML pour Java +url: /fr/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Définir un agent utilisateur personnalisé et les dimensions d'écran dans Aspose.HTML pour Java + +Si vous devez **définir un agent utilisateur personnalisé** lors du rendu HTML avec Aspose.HTML pour Java, ce guide vous montre exactement comment le faire. En configurant un sandbox, vous obtenez également la possibilité de **définir la taille d'écran virtuelle**, garantissant que la mise en page correspond à la fenêtre d'affichage d'un vrai navigateur. + +Vous terminerez ce tutoriel avec un programme complet et exécutable qui **spécifie l'agent utilisateur**, **définit la largeur de l'écran** et **définit la hauteur de l'écran**. Aucun outil externe n'est requis — uniquement Aspose.HTML pour Java et un runtime Java 8+. + +## Ce que vous allez apprendre + +* Comment créer un `SandboxConfiguration` pour isoler le rendu. +* Comment **définir un agent utilisateur personnalisé** et pourquoi c'est important pour les pages réactives. +* Comment **définir la taille d'écran virtuelle** (largeur et hauteur) pour une mise en page précise. +* Comment charger un fichier HTML dans le sandbox et enregistrer le résultat traité. +* Pièges courants et conseils de bonnes pratiques pour le rendu en sandbox. + +> **Prérequis** – Vous avez besoin d'une licence valide d'Aspose.HTML pour Java, de Java 8 ou plus récent, et d'un IDE (IntelliJ IDEA, Eclipse ou VS Code). L'exemple utilise un fichier local `input.html`, mais n'importe quelle URL accessible fonctionne. + +![Diagramme du flux du sandbox](sandbox-flow.png "exemple de définition d'un agent utilisateur personnalisé en Java") + +## Étape 1 : Créer une configuration sandbox (la base) + +Le sandbox isole l'environnement de rendu de la JVM hôte, ce qui est essentiel lorsque vous souhaitez **définir un agent utilisateur personnalisé** ou modifier la taille de la fenêtre d'affichage. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Pourquoi cette étape ?* +`SandboxConfiguration` contient toutes les options de rendu, y compris les **dimensions d'écran** et les chaînes **user‑agent**. En la configurant avant de charger le document, vous garantissez que le moteur HTML respecte ces paramètres dès la première requête. + +## Étape 2 : Définir les dimensions d'écran pour imiter un appareil réel + +Les sites réactifs lisent souvent `window.innerWidth` et `window.innerHeight`. Pour faire croire au moteur qu'il s'exécute sur un écran de 1024 × 768, vous **définissez la taille d'écran virtuelle** : + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Pourquoi c'est important* – Si vous omettez **définir les dimensions d'écran**, le rendu peut utiliser une petite fenêtre d'affichage par défaut, ce qui fait que les media queries CSS choisissent la mise en page mobile. En définissant explicitement **la largeur de l'écran** et **la hauteur de l'écran**, vous contrôlez quelles règles CSS sont appliquées. + +## Étape 3 : Spécifier une chaîne d'agent utilisateur personnalisée + +Certaines pages web livrent un contenu différent selon l'en-tête user‑agent. Pour **spécifier l'agent utilisateur**, il suffit de le définir dans la configuration du sandbox : + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Pourquoi utiliser un agent utilisateur personnalisé ?* +Une chaîne personnalisée peut contourner la détection de bots, déclencher des fonctionnalités réservées aux ordinateurs de bureau, ou tester le comportement d'un site pour une version de navigateur spécifique. Le moteur Aspose transmet cette valeur avec chaque requête HTTP effectuée lors du chargement des ressources externes (CSS, images, scripts). + +## Étape 4 : Charger le document HTML à l'intérieur du sandbox + +Maintenant que le sandbox est entièrement configuré, chargez le fichier HTML. Le constructeur qui accepte un chemin de fichier et un `SandboxConfiguration` applique automatiquement tous les paramètres que nous avons définis. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +Si vous devez charger depuis une URL distante, remplacez le chemin du fichier par la chaîne URL — Aspose.HTML respectera toujours le **agent utilisateur personnalisé défini** et les **dimensions d'écran**. + +## Étape 5 : Enregistrer la sortie traitée + +Après le chargement complet du document, vous pouvez l'enregistrer dans n'importe quel format supporté. Ici nous écrivons un fichier HTML sandboxé qui reflète les modifications du DOM causées par les paramètres personnalisés. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +Le fichier enregistré contiendra le même balisage, mais tout script qui a interrogé `navigator.userAgent` ou inspecté `window.innerWidth` verra désormais les valeurs que vous avez fournies. + +## Exemple complet et exécutable + +En combinant toutes les étapes, vous obtenez un programme autonome que vous pouvez copier, coller et exécuter. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Résultat attendu + +L'exécution du programme crée `sandboxed_output.html`. Si vous l'ouvrez dans un navigateur et inspectez `navigator.userAgent` via la console, vous verrez **AsposeHTML/1.0**. De même, `window.innerWidth` affichera **1024**, confirmant que les **dimensions d'écran définies** ont fonctionné comme prévu. + +## Questions fréquentes & gestion des cas limites + +| Question | Réponse | +|----------|--------| +| **Et si la page charge des ressources supplémentaires depuis un domaine différent ?** | Le sandbox transmet le **user‑agent personnalisé** avec chaque requête, mais les politiques de même origine restent appliquées. Utilisez `sandboxConfig.setAllowCrossDomain(true)` si vous devez assouplir ces restrictions. | +| **Puis-je modifier la taille de l'écran après le chargement du document ?** | Non. Les dimensions d'écran sont lues lors du premier passage de mise en page. Pour rendre avec une taille différente, créez un nouveau `SandboxConfiguration` et rechargez le document. | +| **Dois‑je appeler `document.close()` ?** | Le `HTMLDocument` implémente `AutoCloseable`. Utiliser un bloc try‑with‑resources assure un nettoyage correct, mais l'appel explicite à `close()` est optionnel dans les scripts simples. | +| **En quoi cela diffère‑t‑il de la définition d'un user‑agent dans un client HTTP ?** | Définir le user‑agent sur le sandbox affecte **toutes** les requêtes de ressources effectuées par le moteur HTML, pas seulement le téléchargement initial du HTML. Cela imite plus fidèlement un vrai navigateur. | +| **Le sandbox est‑il sûr pour du HTML non fiable ?** | Oui. Le sandbox isole l'accès au système de fichiers et limite les appels réseau selon la configuration, réduisant le risque que des scripts malveillants affectent votre JVM hôte. | + +## Astuces professionnelles + +* **Réutiliser les configurations** – Si vous rendez de nombreuses pages avec le même viewport, créez un seul `SandboxConfiguration` et réutilisez‑le pour éviter le surcoût de création d'objets. +* **Déboguer avec les logs** – Activez la journalisation d'Aspose.HTML (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) pour voir quelles ressources ont été récupérées avec le user‑agent personnalisé. +* **Combiner avec les media queries CSS** – En ajustant **la largeur de l'écran**, vous pouvez tester le comportement de votre design réactif sur tablettes, téléphones ou grands écrans de bureau sans ouvrir de vrai navigateur. + +## Conclusion + +Vous savez maintenant comment **définir un agent utilisateur personnalisé** et **définir les dimensions d'écran** lors du rendu HTML avec Aspose.HTML pour Java. En configurant un sandbox, vous isolez l'environnement, contrôlez le viewport et assurez que les ressources externes voient exactement les en‑têtes que vous spécifiez. Cette technique est essentielle pour tester les mises en page réactives, contourner les blocages de bots ou reproduire des fonctionnalités réservées aux ordinateurs de bureau dans des pipelines automatisés. + +Ensuite, vous pourriez explorer **comment définir des cookies personnalisés** ou **capturer des captures d'écran rendues** en utilisant l'API de rendu d'Aspose.HTML — les deux concepts s'appuient sur le même modèle de configuration sandbox que vous venez de maîtriser. + +Bon codage ! + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s'appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités API supplémentaires et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Rendu haute DPI en Java – Capturer des captures d'écran de pages Web avec un agent utilisateur personnalisé](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [Comment charger du HTML, définir le DPI de l'appareil et lire la couleur d'arrière‑plan](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Créer un fichier HTML Java & configurer le service réseau (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/java/creating-managing-html-documents/_index.md b/html/french/java/creating-managing-html-documents/_index.md index 7b141f348b..6e0a6f7e16 100644 --- a/html/french/java/creating-managing-html-documents/_index.md +++ b/html/french/java/creating-managing-html-documents/_index.md @@ -74,6 +74,12 @@ Apprenez à récupérer des données JSON et à générer dynamiquement du conte Apprenez à compter le nombre de caractères dans un document HTML en Java à l'aide d'Aspose.HTML, avec un guide détaillé pas à pas. ### [Extraire du texte à partir de HTML en Java – Guide complet de programmation](./extract-text-from-html-in-java-complete-programming-guide/) Apprenez à extraire du texte d'un document HTML en Java avec Aspose.HTML grâce à ce guide complet étape par étape. +### [Comment créer un élément HTML en Java avec Aspose.HTML](./how-to-create-html-element-in-java-using-aspose-html/) +Apprenez à créer un élément HTML en Java à l'aide d'Aspose.HTML grâce à ce guide étape par étape. +### [Comment compter les éléments HTML en Java avec XPath](./how-to-count-html-elements-in-java-with-xpath/) +Apprenez à compter les éléments HTML en Java en utilisant XPath avec Aspose.HTML. +### [Comment sélectionner des éléments par classe en Java avec querySelectorAll](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Apprenez à sélectionner des éléments HTML par classe en Java à l'aide de querySelectorAll avec Aspose.HTML. {{< /blocks/products/pf/tutorial-page-section >}} @@ -112,5 +118,4 @@ Apprenez à extraire du texte d'un document HTML en Java avec Aspose.HTML grâce {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} - +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/french/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..04ad3d87b6 --- /dev/null +++ b/html/french/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-09-29 +description: Apprenez à compter les éléments HTML en Java en utilisant Aspose.HTML + et XPath. Ce guide montre comment charger un document HTML, sélectionner des nœuds + avec XPath et obtenir une liste de nœuds. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: fr +lastmod: 2026-09-29 +og_description: Comment compter les éléments HTML en Java avec Aspose.HTML. Suivez + ce tutoriel complet pour charger un document HTML, sélectionner des nœuds avec XPath, + évaluer XPath en Java et obtenir une liste de nœuds. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: Comment compter les éléments HTML en Java – guide étape par étape +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: Comment compter les éléments HTML en Java avec XPath +url: /fr/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment compter les éléments HTML en Java avec XPath + +Si vous avez besoin de **comment compter les éléments HTML** dans une page web depuis une application Java, ce guide vous fournit une solution complète, prête à l'emploi. À la fin des deux premières phrases, vous saurez exactement comment charger un document HTML, sélectionner des nœuds avec XPath et récupérer une liste de nœuds que vous pouvez compter. + +Nous utiliserons la bibliothèque Aspose.HTML for Java car elle fournit une API compatible DOM et un moteur XPath puissant. Le tutoriel couvre tout ce dont vous avez besoin — importations, code, explications et sortie attendue — afin que vous puissiez copier l'exemple dans votre projet et voir les résultats immédiatement. En cours de route, nous aborderons également **select nodes with XPath**, **get node list Java**, **load HTML document Java**, et **evaluate XPath in Java**. + +## Ce que vous allez réaliser + +* Charger un fichier HTML depuis le système de fichiers. +* Créer une expression XPath qui cible des éléments spécifiques. +* Évaluer l'expression XPath contre le document. +* Récupérer un `NodeList` et compter le nombre d'éléments correspondants. + +Aucun service externe ni configuration complexe n'est requis ; il suffit du JAR Aspose.HTML sur votre classpath. + +--- + +## Comment compter les éléments HTML avec XPath en Java + +Cette section pas à pas montre le code exact dont vous avez besoin. Chaque sous-section correspond à une partie logique du processus, ce qui facilite l'adaptation ou l'extension. + +### Étape 1 : Charger le document HTML en Java + +Tout d'abord, chargez le fichier HTML en mémoire. La classe `HTMLDocument` analyse le fichier et construit un arbre DOM que XPath peut interroger. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Pourquoi c'est important :** +Le chargement du document crée une représentation DOM, nécessaire pour toute évaluation XPath. Si le chemin du fichier est incorrect, Aspose.HTML lève une `FileNotFoundException`, donc vérifiez bien l'emplacement de `input.html`. + +### Étape 2 : Créer et évaluer une expression XPath + +Nous construisons maintenant un XPath qui sélectionne les éléments que nous voulons compter. Dans cet exemple, nous comptons toutes les balises `` dont l'attribut `alt` vaut `"logo"`. + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Pourquoi c'est important :** +L'expression `//img[@alt='logo']` est une façon concise de **select nodes with XPath**. L'appel `evaluate` **evaluate XPath in Java** et renvoie un `XPathResult` générique. Le cast en `NodeList` nous donne un accès direct à la collection de nœuds correspondants. + +### Étape 3 : Récupérer et compter la liste de nœuds + +Enfin, nous comptons le nombre de nœuds retournés. L'API `NodeList` fournit `getLength()` à cet effet. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Pourquoi c'est important :** +`getLength()` est la façon la plus simple de **get node list Java** et d'obtenir un compte. Si le XPath ne correspond à aucun élément, la longueur sera `0`, ce que votre application peut gérer gracieusement. + +### Exemple complet exécutable + +Voici le programme complet, incluant tous les imports et une méthode `main` minimale. Copiez-le dans un fichier nommé `CountHtmlElements.java`, ajoutez le JAR Aspose.HTML à votre projet et exécutez-le. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Sortie attendue** + +Si `input.html` contient trois balises `logo`, le programme affiche : + +``` +Found 3 logo images. +``` + +Si aucune image de ce type n'existe, il affiche : + +``` +Found 0 logo images. +``` + +--- + +## Variations courantes et cas limites + +| Situation | Ce qu'il faut changer | Raison | +|-----------|-----------------------|--------| +| Compter un autre élément (par ex., `

` avec la classe `header`) | Modifier le XPath en `//div[@class='header']` | La syntaxe XPath vous permet de cibler n'importe quelle balise/attribut. | +| Compter tous les éléments quel que soit l'attribut | Utiliser `//*` comme expression XPath | `//*` sélectionne chaque nœud élément du document. | +| Documents volumineux entraînant une pression mémoire | Utiliser un analyseur en flux ou évaluer XPath sur un fragment | Aspose.HTML propose `HTMLDocumentFragment` pour une analyse partielle. | +| Besoin des nœuds réels, pas seulement du compte | Itérer sur `nodes.item(i)` | Vous pouvez traiter chaque nœud après le comptage. | + +**Astuce pro :** Validez toujours la chaîne XPath avant de la passer à `createXPathExpression`. Une expression invalide lève `XPathException`, que vous pouvez intercepter pour fournir un message d'erreur convivial. + +--- + +## Liste de vérification de dépannage + +1. **Bibliothèque introuvable** – Assurez-vous que le JAR Aspose.HTML for Java est sur le classpath (`-cp` ou les dépendances de votre IDE`). +2. **Fichier introuvable** – Vérifiez que `input.html` se trouve relative au répertoire de travail ou utilisez un chemin absolu. +3. **Résultats nuls** – Revérifiez les valeurs des attributs et la sensibilité à la casse (`alt='logo'` vs `alt='Logo'`). XPath est sensible à la casse. +4. **Problèmes de performance** – Réutilisez une seule instance `HTMLDocument` si vous devez exécuter de nombreuses requêtes XPath sur le même fichier. + +--- + +## Conclusion + +Vous savez maintenant **comment compter les éléments HTML** en Java en utilisant Aspose.HTML et XPath. En chargeant le document HTML, en créant une expression XPath, **evaluate XPath in Java**, et en récupérant une **node list**, vous pouvez rapidement déterminer le nombre d'éléments correspondants. Cette technique fonctionne pour n'importe quelle balise ou attribut, ce qui en fait un outil polyvalent pour le web‑scraping, les tests automatisés ou l'analyse de contenu. + +Les prochaines étapes que vous pourriez explorer incluent : + +* Utiliser **select nodes with XPath** pour extraire les valeurs d'attributs (par ex., `src` d'image). +* Combiner plusieurs requêtes XPath pour créer un rapport de statistiques d'éléments. +* Intégrer cette logique dans un service Java plus grand qui traite des fichiers HTML en masse. + +N'hésitez pas à expérimenter avec différentes expressions XPath et structures de documents — compter les éléments HTML n'est que le début ! + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s'appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications pas à pas pour vous aider à maîtriser des fonctionnalités API supplémentaires et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Comment analyser le HTML en Java – Charger, interroger et compter les éléments](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [Comment interroger le HTML en Java – Sélectionner des éléments, filtrer par attribut et obtenir le texte](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Charger un document HTML Java – Guide complet avec XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/french/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..10246426fa --- /dev/null +++ b/html/french/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,185 @@ +--- +category: general +date: 2026-09-29 +description: Apprenez à créer un élément HTML en Java, ajouter un paragraphe, définir + son texte et l’ajouter au corps avec Aspose.HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: fr +lastmod: 2026-09-29 +og_description: Créer un élément HTML en Java en ajoutant un paragraphe, en définissant + son texte et en l’ajoutant au corps avec Aspose.HTML. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: Créer un élément HTML en Java – guide Aspose.HTML étape par étape +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: Comment créer un élément HTML en Java à l'aide d'Aspose.HTML +url: /fr/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment créer un élément HTML en Java avec Aspose.HTML + +Si vous devez **créer un élément HTML** dans une application Java, ce guide vous présente une solution complète et exécutable. Vous verrez comment **ajouter un paragraphe**, définir son texte et **ajouter l'élément au corps** d'un fichier HTML existant avec Aspose.HTML. + +Le tutoriel couvre tout, du chargement d'un document à l'enregistrement du fichier modifié, afin que vous puissiez copier le code dans votre propre projet sans recherches supplémentaires. + +## Prérequis + +Avant de commencer, assurez‑vous d'avoir : + +* Java 17 ou version ultérieure installé. +* Aspose.HTML for Java 23.10 (ou la dernière version) ajouté au classpath de votre projet. +* Un fichier `input.html` simple dans un répertoire connu. Le fichier peut être vide (``) ou contenir du balisage existant. + +## Étape 1 : Charger le document HTML existant + +Le chargement du fichier source vous fournit un arbre DOM manipulable. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +Le constructeur `HTMLDocument` analyse le fichier et crée un DOM actif. Si le fichier ne peut pas être lu, Aspose.HTML lève une `IOException` ; vous pouvez laisser l'exception se propager ou la gérer avec un bloc try‑catch. + +## Étape 2 : Créer un nouvel élément `

` et ajouter du texte au HTML + +Créer un nouvel élément est similaire à l'utilisation de `document.createElement` dans un navigateur. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` crée automatiquement un nœud texte et l'attache à l'élément, ce qui est la méthode recommandée pour **ajouter du texte au HTML**. Cette méthode échappe également les caractères qui pourraient casser le balisage. + +## Étape 3 : Ajouter l'élément au corps + +Maintenant que le paragraphe est prêt, vous devez le placer à l'intérieur du `` du document. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` renvoie le nœud ``, et `appendChild` insère le nouveau `

` comme dernier enfant. Si le document ne possède pas d'élément `` (peu probable pour un fichier HTML bien formé), Aspose.HTML en crée automatiquement un. + +## Étape 4 : Enregistrer le document modifié + +Enfin, écrivez le DOM mis à jour sur le disque. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` sérialise le DOM, préservant le balisage existant et ajoutant le nouveau paragraphe. Le `output.html` résultant contiendra : + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Code source complet (exemple java html) + +Assembler toutes les étapes vous fournit un programme autonome que vous pouvez exécuter immédiatement. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### Ce que fait le code + +| Étape | Action | Pourquoi c'est important | +|------|--------|---------------------------| +| Charger le document | `new HTMLDocument(...)` | Analyse le HTML source en un DOM que vous pouvez manipuler. | +| Créer l'élément | `doc.createElement("p")` | Reflète l'API du navigateur, garantissant que l'élément respecte les normes HTML. | +| Définir le texte | `setTextContent(...)` | Garantit un échappement correct et évite la création manuelle de nœuds texte. | +| Ajouter au corps | `doc.getBody().appendChild(...)` | Place le nouvel élément à l'endroit où les navigateurs le rendront. | +| Enregistrer le fichier | `doc.save(...)` | Persiste les modifications, produisant un fichier HTML valide prêt à être utilisé. | + +## Variantes courantes et cas limites + +* **Ajouter plusieurs éléments** – répétez les étapes 2‑3 pour chaque nouveau nœud avant d'appeler `save`. +* **Insérer avant un nœud spécifique** – utilisez `insertBefore(newNode, referenceNode)` au lieu de `appendChild`. +* **Travailler avec des fragments** – `doc.createDocumentFragment()` vous permet de construire un groupe de nœuds et de les attacher en une seule opération, ce qui améliore les performances pour de grandes mises à jour. +* **Gestion des caractères UTF‑8** – Aspose.HTML écrit automatiquement en UTF‑8 ; assurez‑vous simplement que votre fichier source est encodé de la même manière. + +## Conseils pratiques + +* **Gestion des chemins** – Utilisez `java.nio.file.Paths` pour construire des chemins de fichiers indépendants de la plateforme. +* **Sécurité des exceptions** – Encapsulez tout le bloc dans une instruction try‑with‑resources si vous devez fermer des flux supplémentaires. +* **Performance** – Pour des fichiers HTML très volumineux, envisagez de charger le document avec `HTMLDocument(String, LoadOptions)` où vous pouvez désactiver les ressources externes afin d'accélérer l'analyse. + +## Vérifier le résultat + +Après avoir exécuté le programme, ouvrez `output.html` dans n'importe quel navigateur. Vous devriez voir le paragraphe « Added by Aspose.HTML » affiché à l'endroit où le corps original se termine. Inspectez le code source de la page pour confirmer que l'élément `

` est présent à l'intérieur de ``. + +## Conclusion + +Vous savez maintenant comment **créer un élément HTML** en Java, **ajouter un paragraphe**, **ajouter du texte au HTML**, et **ajouter l'élément au corps** en utilisant Aspose.HTML. L'**exemple java html** complet montre un flux de travail propre et prêt pour la production que vous pouvez étendre pour manipuler n'importe quelle partie d'un document HTML. + +Ensuite, explorez des sujets connexes tels que **modifier les attributs**, **supprimer des nœuds**, ou **travailler avec les styles CSS** pour créer des pipelines de traitement HTML plus riches. Bon codage ! + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s'appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités d'API supplémentaires et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Créer un nouvel élément html avec Java – Guide complet Aspose.HTML](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [ajouter un enfant au corps en Java – Tutoriel complet Aspose.HTML](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Ajouter un élément au corps avec Aspose.HTML pour Java en utilisant un observateur de mutation DOM](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/french/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..b095fd4db1 --- /dev/null +++ b/html/french/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-09-29 +description: Apprenez à sélectionner des éléments par classe, lire du HTML depuis + un fichier et trouver les liens externes en Java. Ce guide étape par étape couvre + l'itération efficace d’une NodeList. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: fr +lastmod: 2026-09-29 +og_description: Sélectionner des éléments par classe en Java, lire le HTML depuis + un fichier et trouver les liens externes avec querySelectorAll. Suivez l’exemple + complet pour parcourir un NodeList. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Sélectionner des éléments par classe en Java – guide complet avec querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: Comment sélectionner des éléments par classe en Java avec querySelectorAll +url: /fr/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment sélectionner des éléments par classe en Java avec querySelectorAll + +Si vous devez **sélectionner des éléments par classe** lors du traitement d'un fichier HTML en Java, ce guide vous montre exactement comment le faire. Vous apprendrez à lire le HTML depuis un fichier, à utiliser `querySelectorAll` pour trouver les liens externes, et à parcourir en toute sécurité le `NodeList` résultant. + +Travailler avec du HTML en Java semble souvent lourd, mais les bibliothèques modernes vous offrent une API concise basée sur les sélecteurs CSS. L'exemple ci‑dessous utilise **jsoup** (version 1.17.2) car il implémente des sélecteurs de type `querySelectorAll` et renvoie une collection `Elements` qui se comporte comme un `NodeList`. Vous pouvez adapter la même logique à d'autres implémentations DOM si nécessaire. + +## Prérequis + +* JDK 17 ou version supérieure installé. +* Maven ou Gradle pour la gestion des dépendances. +* Familiarité de base avec les streams Java et le modèle DOM. + +Ajoutez jsoup à votre projet : + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## Étape 1 : Lire le HTML depuis un fichier + +La première tâche consiste à charger le document HTML depuis le disque. `Jsoup.parse(Path, Charset)` lit le fichier et construit un arbre DOM que vous pouvez interroger. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Pourquoi c’est important* : charger le fichier une seule fois évite des I/O répétés pendant que vous parcourez les éléments plus tard. L’objet `Document` contient le DOM complet, ce qui permet des requêtes de sélecteur rapides. + +## Étape 2 : Utiliser `querySelectorAll` pour sélectionner des éléments par classe + +Maintenant que le document est en mémoire, vous pouvez **sélectionner des éléments par classe** à l’aide d’un sélecteur CSS. Le sélecteur `"a.external"` correspond aux balises `` qui possèdent la classe `external` — exactement ce dont vous avez besoin pour **trouver les liens externes**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Pourquoi c’est important* : utiliser un sélecteur de classe est à la fois expressif et performant. La bibliothèque traduit le sélecteur en un parcours optimisé, vous n’avez donc pas besoin d’écrire des boucles manuelles sur chaque nœud. + +## Étape 3 : Parcourir le NodeList (Elements) en Java + +`Elements` implémente `Iterable`, ce qui signifie que vous pouvez utiliser une boucle `for‑each` standard pour **parcourir les objets NodeList en Java**. La boucle ci‑dessous affiche l’attribut `href` de chaque lien. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Pourquoi c’est important* : l’itération directe rend le code lisible et évite le surcoût de conversion de la collection en stream lorsque vous avez seulement besoin d’une sortie simple. + +## Exemple complet fonctionnel + +En combinant les trois étapes, on obtient un programme autonome que vous pouvez exécuter depuis la ligne de commande. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Sortie attendue + +En supposant que `input.html` contienne : + +```html +Example +About +OpenAI +``` + +L’exécution du programme affiche : + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Astuces professionnelles et pièges courants + +* **L’encodage est important** – Lisez toujours le fichier avec UTF‑8 (ou le jeu de caractères qui correspond à votre source). Un encodage incorrect peut corrompre les caractères dans les valeurs d’attribut. +* **Classes multiples** – Si un élément possède plusieurs classes (par ex., `class="btn external"`), le sélecteur `"a.external"` correspond toujours car les sélecteurs de classe CSS vérifient la présence du token, pas la chaîne exacte. +* **Astuce de performance** – Si vous avez seulement besoin de l’attribut `href`, vous pouvez le demander directement avec `doc.select("a.external[href]").eachAttr("href")`. Cela évite de créer des objets `Element` complets pour chaque correspondance. +* **Sécurité contre les null** – `link.attr("href")` renvoie une chaîne vide si l’attribut est absent, vous n’avez donc pas besoin de vérifier la nullité avant d’afficher. + +## Questions fréquentes + +**Q : Cette méthode fonctionne‑t‑elle avec des fragments HTML qui n’ont pas de racine `` ?** +R : Oui. `Jsoup.parse` traite l’entrée comme un fragment et ajoute automatiquement les éléments racine manquants, ce qui permet aux sélecteurs de fonctionner sur le corps du fragment. + +**Q : Puis‑je utiliser `querySelectorAll` sans jsoup ?** +R : L’API DOM standard de Java (`org.w3c.dom`) ne comprend pas `querySelectorAll`. Des bibliothèques comme **HTMLUnit** ou **jodd-lagarto** offrent des méthodes similaires. Le schéma présenté ici — charger, sélectionner avec CSS, itérer — reste le même. + +**Q : Et si je dois modifier les liens au lieu de simplement les afficher ?** +R : Après avoir obtenu chaque `Element`, vous pouvez appeler `link.attr("href", "newUrl")` puis écrire le document de nouveau sur le disque avec `Files.writeString`. + +## Conclusion + +Vous savez maintenant comment **sélectionner des éléments par classe**, **lire le HTML depuis un fichier**, **trouver les liens externes**, et **parcourir un NodeList en Java** en utilisant des sélecteurs de type `querySelectorAll`. L’exemple complet montre un flux de travail propre et prêt pour la production que vous pouvez intégrer dans des pipelines de scraping ou de transformation plus vastes. + +Ensuite, explorez des sujets connexes tels que **l’analyse de contenu dynamique avec HTMLUnit**, **l’écriture du HTML modifié sur le disque**, ou **l’utilisation des streams Java pour collecter les URL des liens dans une liste**. Chacun de ces sujets s’appuie sur la technique fondamentale de sélection basée sur les classes présentée ici. Bon codage ! + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s’appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités d’API supplémentaires et à explorer des approches d’implémentation alternatives dans vos propres projets. + +- [Comment interroger le HTML en Java – Sélectionner des éléments, filtrer par attribut et obtenir le texte](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Parcourir NodeList Java – Lire le HTML et obtenir le src des images](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [Charger des documents HTML depuis un fichier avec Aspose.HTML pour Java](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/java/css-html-form-editing/_index.md b/html/french/java/css-html-form-editing/_index.md index 7dd0606fa7..ea16c8639d 100644 --- a/html/french/java/css-html-form-editing/_index.md +++ b/html/french/java/css-html-form-editing/_index.md @@ -72,6 +72,8 @@ Apprenez à interroger le HTML en Java, à sélectionner des éléments, filtrer Apprenez à récupérer le style CSS calculé d'un élément en Java à l'aide d'Aspose.HTML. ### [Comment obtenir le CSS en Java – Guide complet pour extraire les styles avec Aspose.HTML](./how-to-get-css-in-java-complete-guide-to-extract-styles-with/) Apprenez à extraire les styles CSS d'une page HTML en Java à l'aide d'Aspose.HTML dans ce guide complet. +### [Comment lire le CSS à partir du HTML avec Aspose.HTML en Java](./how-to-read-css-from-html-with-aspose-html-in-java/) +Apprenez à extraire et lire les feuilles de style CSS d'un document HTML en Java à l'aide d'Aspose.HTML. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/french/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/french/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..2f6f88b89b --- /dev/null +++ b/html/french/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-09-29 +description: Comment lire le CSS à partir du HTML en utilisant Aspose.HTML pour Java. + Apprenez à sélectionner un élément par ID, obtenir le style calculé, extraire les + propriétés CSS et afficher la couleur de fond. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: fr +lastmod: 2026-09-29 +og_description: Comment lire le CSS à partir du HTML en utilisant Aspose.HTML pour + Java. Instructions étape par étape pour sélectionner un élément par ID, obtenir + le style calculé, extraire le CSS et afficher la couleur de fond. +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: Comment lire le CSS depuis le HTML avec Aspose.HTML – Guide Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: Comment lire le CSS depuis le HTML avec Aspose.HTML en Java +url: /fr/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment lire le CSS à partir de HTML avec Aspose.HTML en Java + +Si vous avez besoin de **comment lire le CSS** à partir d'un fichier HTML dans une application Java, ce guide vous montre exactement comment faire. À la fin des deux premières phrases, vous saurez comment sélectionner un élément par id, obtenir le style calculé et afficher la couleur d'arrière-plan — le tout avec Aspose.HTML. + +Nous parcourrons le chargement d'un document HTML, la localisation d'un élément spécifique, l'extraction de son CSS calculé et l'affichage de la valeur de la couleur d'arrière-plan. Aucun outil externe n'est requis en dehors de la bibliothèque Aspose.HTML pour Java, et le code fonctionne avec Java 8+. + +## Ce que vous apprendrez + +* Comment lire le CSS à partir d'un document HTML en utilisant Aspose.HTML. +* Comment **sélectionner un élément par id** avec `querySelector`. +* Comment **obtenir le style calculé** pour n'importe quel nœud DOM. +* Comment **extraire le CSS à partir de HTML** et lire les propriétés individuelles comme **afficher la couleur d'arrière-plan**. +* Écueils courants et conseils de bonnes pratiques pour une extraction fiable du CSS. + +### Prérequis + +* Java 8 ou version plus récente installé. +* Maven ou Gradle pour gérer la dépendance Aspose.HTML. +* Un fichier HTML simple (par ex., `input.html`) contenant un élément avec un attribut `id` que vous souhaitez inspecter. + +--- + +## Étape 1 : Charger le document HTML (comment lire le CSS) + +La première opération dans tout flux de travail de lecture du CSS consiste à charger le HTML source. Aspose.HTML fournit la classe `HTMLDocument` qui analyse le fichier et construit un DOM que vous pouvez interroger. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Pourquoi c'est important :** Charger le document crée un DOM complet, permettant un calcul fiable des styles qui reflète ce qu'un navigateur produirait. Ignorer cette étape vous laisserait avec du texte brut plutôt qu'un document structuré. + +--- + +## Étape 2 : Sélectionner l'élément par id + +Pour extraire le CSS d'un nœud spécifique, vous avez d'abord besoin d'une référence à ce nœud. La méthode `querySelector` accepte n'importe quel sélecteur CSS, ce qui la rend parfaite pour sélectionner par ID. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Pourquoi utiliser `querySelector` ?:** Elle suit la même syntaxe de sélecteur que vous utilisez en CSS, vous permettant de réutiliser des modèles familiers comme `#myDiv`, `.className` ou les sélecteurs d'attributs sans logique d'analyse supplémentaire. + +--- + +## Étape 3 : Obtenir le style calculé de l'élément + +Une fois que vous avez l'élément, Aspose.HTML peut calculer le **computed style** — les valeurs finales après l'application de toutes les règles CSS, de l'héritage et des valeurs par défaut. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Pourquoi calculer le style ?:** Le style calculé reflète les valeurs réelles que le navigateur rendrait, et non seulement les déclarations brutes. C’est essentiel lorsque vous devez connaître le `background-color`, le `font-size` ou toute autre propriété effective. + +--- + +## Étape 4 : Extraire la propriété CSS et afficher la couleur d'arrière-plan + +Maintenant que vous avez le `StyleDeclaration`, vous pouvez lire n'importe quelle propriété CSS. Dans cet exemple, nous nous concentrons sur **display background color**, mais la même approche fonctionne pour `font-size`, `margin`, etc. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**Sortie attendue** + +``` +Background color: rgb(255, 0, 0) +``` + +Si l'élément hérite de son arrière-plan d'un parent ou d'une feuille de style, la valeur calculée inclura déjà cet héritage. + +--- + +## Gestion des cas limites et des variations + +### Élément non trouvé +Si `querySelector` renvoie `null`, le code ci‑dessus affiche déjà une erreur et quitte. En production, vous pourriez vouloir lancer une exception personnalisée ou revenir à un élément par défaut. + +### Plusieurs éléments avec le même ID (HTML invalide) +Bien que les ID doivent être uniques, un HTML malformé peut contenir des doublons. `querySelector` renvoie la première correspondance. Pour traiter toutes les correspondances, utilisez `querySelectorAll` et itérez sur le `NodeList` résultant. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Différentes propriétés CSS +Pour **extraire le CSS à partir de HTML** au-delà de la couleur d'arrière-plan, appelez simplement le getter approprié sur `StyleDeclaration`. Les getters courants incluent : + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +Si une propriété n'est pas explicitement définie, le getter renvoie la valeur par défaut calculée (par ex., `display: block` pour un `
`). + +### Préfixes spécifiques aux navigateurs +Aspose.HTML normalise les propriétés préfixées par les fournisseurs (par ex., `-webkit-transform`) en leurs équivalents standards lorsque c'est possible. Si vous avez besoin de la valeur brute, vous pouvez interroger directement la map `StyleDeclaration` : + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +--- + +## Exemple complet exécutable + +Ci-dessous se trouve une classe Java autonome qui regroupe toutes les étapes. Remplacez `YOUR_DIRECTORY/input.html` par le chemin vers votre fichier HTML. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +### Exécution du programme + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +Vous devriez voir la couleur d'arrière-plan affichée dans la console, confirmant que vous avez réussi à **comment lire le CSS**, **sélectionner un élément par id**, **obtenir le style calculé**, et **afficher la couleur d'arrière-plan**. + +--- + +## Conseils de bonnes pratiques (pro tips) + +* **Cachez le `HTMLDocument`** si vous devez lire le CSS de nombreux éléments ; analyser le fichier à plusieurs reprises nuit aux performances. +* **Validez le HTML** avant le chargement — un balisage malformé peut entraîner des nœuds manquants ou des valeurs calculées incorrectes. +* **Utilisez try‑with‑resources** (ou `dispose` explicite) pour libérer les ressources natives détenues par les objets Aspose.HTML. +* **Enregistrez le `StyleDeclaration` complet** lors du débogage de styles complexes : `System.out.println(computedStyle.getCssText());` vous fournit un instantané de chaque propriété calculée. + +--- + +## Conclusion + +Vous savez maintenant **comment lire le CSS** à partir d'un fichier HTML en Java en utilisant Aspose.HTML. En chargeant le document, **sélectionner un élément par id**, **obtenir le style calculé**, et **extraire la propriété background‑color**, vous pouvez inspecter programmétiquement toute information de style qu'un navigateur appliquerait. + +À partir de là, vous pouvez étendre la solution pour extraire d'autres attributs CSS, gérer plusieurs éléments, ou intégrer les données dans un cadre de tests UI. + +Bon codage, et n'hésitez pas à expérimenter avec différents sélecteurs et propriétés de style pour répondre aux besoins de votre projet ! + +## Que devriez‑vous apprendre ensuite ? + +Les tutoriels suivants couvrent des sujets étroitement liés qui s'appuient sur les techniques démontrées dans ce guide. Chaque ressource comprend des exemples de code complets et fonctionnels avec des explications étape par étape pour vous aider à maîtriser des fonctionnalités supplémentaires de l'API et explorer des approches d'implémentation alternatives dans vos propres projets. + +- [Comment obtenir le CSS en Java – Récupérer le style calculé avec Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [comment lire le css en Java – Guide complet avec Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Obtenir le style calculé Java – Extraire la couleur d'arrière-plan depuis HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/french/java/editing-html-documents/_index.md b/html/french/java/editing-html-documents/_index.md index 3e98f01b23..f672c51f74 100644 --- a/html/french/java/editing-html-documents/_index.md +++ b/html/french/java/editing-html-documents/_index.md @@ -58,9 +58,10 @@ Découvrez comment ajouter du code CSS en ligne à des documents HTML à l'aide Apprenez à gérer les propriétés HTML internes et externes dans Aspose.HTML pour Java avec ce guide étape par étape, parfait pour les développeurs Web et les créateurs de contenu. ### [Implémenter du CSS interne dans des documents HTML avec Aspose.HTML pour Java](./implement-internal-css-html-documents/) Apprenez à implémenter du CSS interne dans des documents HTML à l'aide d'Aspose.HTML pour Java avec notre didacticiel simple étape par étape. +### [Comment changer la couleur d'arrière-plan en JavaScript avec Java](./how-to-change-background-color-javascript-using-java/) +Apprenez à modifier la couleur d'arrière-plan d'une page via JavaScript en utilisant Aspose.HTML pour Java. ### [Modifier le texte h1 dans un MHTML avec Java – Guide complet étape par étape](./change-h1-text-in-mhtml-with-java-full-step-by-step-guide/) Apprenez à modifier le texte h1 d'un fichier MHTML en Java grâce à un guide détaillé étape par étape. - ### [Pool de threads fixe Java – Nettoyage HTML parallèle avec ExecutorService](./fixed-thread-pool-java-parallel-html-cleaning-with-executors/) ### [Ajouter un enfant au corps en Java – Tutoriel complet Aspose.HTML](./append-child-to-body-in-java-full-aspose-html-tutorial/) ### [Créer un nouvel élément HTML avec Java – Guide complet Aspose.HTML](./create-new-html-element-with-java-full-aspose-html-guide/) diff --git a/html/french/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/french/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..83f2824bc3 --- /dev/null +++ b/html/french/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,248 @@ +--- +category: general +date: 2026-09-29 +description: Modifier la couleur d'arrière-plan avec JavaScript dans un fichier HTML + en utilisant Java. Apprenez à charger du HTML en Java, à exécuter du JS dans le + HTML et à modifier le HTML avec Java pour un nouvel arrière‑plan de page. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: fr +lastmod: 2026-09-29 +og_description: Modifier la couleur d'arrière‑plan avec JavaScript dans une page HTML + en utilisant Java. Ce tutoriel vous montre comment charger du HTML en Java, exécuter + du JS dans le HTML et définir l'arrière‑plan de la page de façon programmatique. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: Changer la couleur d'arrière‑plan avec JavaScript et Java – guide étape + par étape +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: Comment changer la couleur d'arrière-plan en JavaScript en utilisant Java +url: /fr/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Comment changer la couleur d'arrière‑plan javascript avec Java + +Si vous devez **changer la couleur d'arrière‑plan javascript** dans un fichier HTML existant, vous pouvez le faire entièrement depuis Java sans ouvrir de navigateur. Ce tutoriel vous montre comment **charger du html en java**, exécuter un petit extrait JavaScript, puis **modifier le html avec java** afin que l'arrière‑plan de la page soit mis à jour. + +La solution fonctionne avec la bibliothèque open‑source **HTMLUnit**, qui fournit un navigateur sans tête capable d’évaluer le JavaScript exactement comme le ferait un vrai navigateur. À la fin de ce guide, vous disposerez d’une méthode réutilisable qui **définit l'arrière‑plan de la page** à n’importe quelle couleur de votre choix. + +## Prérequis + +| Ce dont vous avez besoin | Pourquoi c'est important | +|--------------------------|---------------------------| +| Java 8 ou version supérieure | HTMLUnit nécessite au moins Java 8. | +| Outil de construction Maven ou Gradle | Pour récupérer automatiquement la dépendance HTMLUnit. | +| Un fichier HTML que vous souhaitez modifier (par ex., `input.html`) | Le document source qui sera chargé et modifié. | + +Ajoutez HTMLUnit à votre projet : + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Astuce :** Utilisez la dernière version stable d'HTMLUnit pour obtenir le moteur JavaScript le plus précis. + +## Changer la couleur d'arrière‑plan javascript – charger le HTML en Java + +La première étape consiste à charger le document HTML dans un objet `HTMLPage`. Cela vous donne une API de type DOM ainsi qu’un contexte d’exécution JavaScript. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Pourquoi c'est important* : `WebClient` crée un environnement sandbox où le JavaScript peut s’exécuter, vous permettant ainsi de **run js in html** exactement comme le ferait le navigateur d’un utilisateur. + +## Exécuter js in html pour définir l'arrière‑plan de la page + +Une fois la page chargée, vous pouvez évaluer n’importe quelle expression JavaScript. L’extrait ci‑dessous modifie la propriété `backgroundColor` du style de l’élément ``. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Explication* : +- `document.body.style.backgroundColor` est la propriété DOM standard pour l’arrière‑plan de la page. +- En appelant `eval`, nous **run js in html** sans besoin d’une vraie fenêtre de navigateur. +- La méthode est réutilisable pour n’importe quelle couleur, répondant ainsi à l’exigence **set page background**. + +## Modifier le html avec java et enregistrer le résultat + +Après l’exécution du script, le DOM reflète le nouveau style. Vous pouvez maintenant écrire le HTML mis à jour sur le disque. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +Assembler le tout vous donne un programme unique et exécutable : + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### Sortie attendue + +L’exécution du programme affiche : + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +Ouvrir `js_modified.html` dans n’importe quel navigateur montre la page avec un arrière‑plan bleu clair, confirmant que l’opération **change background color javascript** a réussi. + +## Variations courantes et cas limites + +| Situation | Comment le gérer | +|-----------|------------------| +| **Différents formats de couleur** | Passez n’importe quelle valeur compatible CSS (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **Balise `` manquante** | Le script échouera silencieusement ; vous pouvez d’abord vous assurer que `` existe avec `page.getFirstByXPath("//body")`. | +| **Fichiers HTML volumineux** | Désactivez le CSS (`setCssEnabled(false)`) et activez uniquement les fonctionnalités JavaScript dont vous avez besoin pour réduire la consommation mémoire. | +| **Exécution de plusieurs scripts** | Appelez `changeBackground` à plusieurs reprises ou créez une méthode utilitaire qui accepte une liste de commandes JavaScript. | + +## Conclusion + +Vous savez maintenant comment **changer la couleur d'arrière‑plan javascript** en chargeant un fichier HTML avec Java, **run js in html**, et **modifier le html avec java** pour **set page background** à la couleur de votre choix. L’exemple complet ci‑dessus fonctionne avec la dernière version d’HTMLUnit et peut être intégré à des pipelines d’automatisation plus larges, comme le traitement par lots de rapports HTML ou la préparation de modèles d’e‑mail. + +**Prochaines étapes** +- Explorez d’autres manipulations du DOM (par ex., insertion d’éléments, suppression de scripts). +- Combinez cette approche avec un moteur de rendu PDF pour générer des PDF des pages stylisées. +- Essayez d’utiliser un autre moteur sans tête comme Selenium WebDriver si vous avez besoin d’une fidélité totale du navigateur. + +Bonne programmation ! + +## Que devriez‑vous apprendre ensuite ? + + +Les tutoriels suivants couvrent des sujets étroitement liés qui s’appuient sur les techniques démontrées dans ce guide. Chaque ressource inclut des exemples de code complets avec des explications pas à pas pour vous aider à maîtriser d’autres fonctionnalités d’API et explorer des approches d’implémentation alternatives dans vos projets. + +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Generate HTML from JavaScript in Java – Complete Step‑by‑Step Guide](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/java/configuring-environment/_index.md b/html/german/java/configuring-environment/_index.md index 2dbf65ca2e..cd91810130 100644 --- a/html/german/java/configuring-environment/_index.md +++ b/html/german/java/configuring-environment/_index.md @@ -114,6 +114,8 @@ Erfahren Sie, wie Sie Sandbox‑Einrichtung in Aspose.HTML für Java implementie Erfahren Sie, wie Sie ein benutzerdefiniertes Benutzer‑Stylesheet in Aspose.HTML für Java festlegen, um das Dokumentstyling zu verbessern und HTML mühelos zu PDF zu konvertieren. ### [Aspose HTML Sandbox erstellen – Vollständiger Java‑Leitfaden](./create-aspose-html-sandbox-complete-java-guide/) Erfahren Sie, wie Sie eine vollständige Sandbox für Aspose.HTML in Java einrichten, um sichere HTML‑zu‑PDF‑Konvertierungen zu gewährleisten. +### [Benutzerdefinierten User-Agent und Bildschirmabmessungen in Aspose.HTML für Java festlegen](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Erfahren Sie, wie Sie einen benutzerdefinierten User-Agent und die Bildschirmgröße festlegen, um HTML‑zu‑PDF‑Konvertierungen zu steuern. --- diff --git a/html/german/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/german/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..6aa8e1b9fb --- /dev/null +++ b/html/german/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,195 @@ +--- +category: general +date: 2026-09-29 +description: Legen Sie einen benutzerdefinierten User‑Agent in Aspose.HTML für Java + fest und erfahren Sie, wie Sie die virtuelle Bildschirmgröße für eine genaue HTML‑Darstellung + einstellen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: de +lastmod: 2026-09-29 +og_description: Legen Sie einen benutzerdefinierten User‑Agent in Aspose.HTML für + Java fest und erfahren Sie, wie Sie die virtuelle Bildschirmgröße für eine genaue + HTML‑Darstellung einstellen. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Benutzerdefinierten User-Agent und Bildschirmabmessungen in Aspose.HTML + für Java festlegen +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Benutzerdefinierten User-Agent und Bildschirmabmessungen in Aspose.HTML für + Java festlegen +url: /de/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Benutzerdefinierten User-Agent und Bildschirmabmessungen in Aspose.HTML für Java festlegen + +Wenn Sie beim Rendern von HTML mit Aspose.HTML für Java **einen benutzerdefinierten User-Agent festlegen** müssen, zeigt Ihnen dieser Leitfaden genau, wie das geht. Durch die Konfiguration eines Sandboxes erhalten Sie außerdem die Möglichkeit, **die virtuelle Bildschirmgröße festzulegen**, sodass das Layout einem echten Browser-Viewport entspricht. + +Sie schließen dieses Tutorial mit einem vollständigen, ausführbaren Programm ab, das **den User-Agent angibt**, **die Bildschirmbreite festlegt** und **die Bildschirmhöhe festlegt**. Es werden keine externen Werkzeuge benötigt – nur Aspose.HTML für Java und eine Java 8+ Laufzeit. + +## Was Sie lernen werden + +* Wie man eine `SandboxConfiguration` erstellt, um das Rendern zu isolieren. +* Wie man **einen benutzerdefinierten User-Agent festlegt** und warum das für responsive Seiten wichtig ist. +* Wie man **die virtuelle Bildschirmgröße festlegt** (Bildschirmbreite und -höhe) für ein genaues Layout. +* Wie man eine HTML-Datei im Sandbox lädt und das verarbeitete Ergebnis speichert. +* Häufige Fallstricke und Best‑Practice‑Tipps für sandboxbasiertes Rendering. + +> **Voraussetzungen** – Sie benötigen eine gültige Aspose.HTML für Java Lizenz, Java 8 oder neuer und eine IDE (IntelliJ IDEA, Eclipse oder VS Code). Das Beispiel verwendet eine lokale `input.html`‑Datei, aber jede erreichbare URL funktioniert. + +![Sandbox-Flussdiagramm](sandbox-flow.png "Beispiel für benutzerdefinierten User-Agent in Java") + +## Schritt 1: Erstellen einer Sandbox-Konfiguration (die Grundlage) + +Die Sandbox isoliert die Rendering-Umgebung von der Host‑JVM, was wichtig ist, wenn Sie **einen benutzerdefinierten User-Agent festlegen** oder die Viewport‑Größe ändern möchten. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Warum dieser Schritt?* +`SandboxConfiguration` enthält alle Rendering‑Optionen, einschließlich **Bildschirmabmessungen** und **User‑Agent**‑Strings. Durch die Konfiguration vor dem Laden des Dokuments stellen Sie sicher, dass die HTML‑Engine diese Einstellungen bereits bei der ersten Anforderung berücksichtigt. + +## Schritt 2: Bildschirmabmessungen festlegen, um ein echtes Gerät zu simulieren + +Responsive Websites lesen häufig `window.innerWidth` und `window.innerHeight`. Um die Engine glauben zu lassen, sie läuft auf einem 1024 × 768‑Bildschirm, **legen Sie die virtuelle Bildschirmgröße fest**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Warum das wichtig ist* – Wenn Sie **Bildschirmabmessungen festlegen** weglassen, könnte der Renderer standardmäßig ein winziges Viewport verwenden, wodurch CSS‑Media‑Queries das mobile Layout auswählen. Durch das explizite **Festlegen der Bildschirmbreite** und **Festlegen der Bildschirmhöhe** steuern Sie, welche CSS‑Regeln angewendet werden. + +## Schritt 3: Einen benutzerdefinierten User‑Agent‑String angeben + +Einige Webseiten liefern unterschiedliche Inhalte basierend auf dem User‑Agent‑Header. Um **den User-Agent anzugeben**, setzen Sie ihn einfach in der Sandbox‑Konfiguration: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Warum einen benutzerdefinierten User‑Agent verwenden?* +Ein benutzerdefinierter String kann Bot‑Erkennungen umgehen, Desktop‑only‑Funktionen auslösen oder testen, wie sich eine Seite für eine bestimmte Browser‑Version verhält. Die Aspose‑Engine leitet diesen Wert bei jeder HTTP‑Anfrage weiter, die beim Laden externer Ressourcen (CSS, Bilder, Skripte) gestellt wird. + +## Schritt 4: Das HTML‑Dokument innerhalb der Sandbox laden + +Da die Sandbox nun vollständig konfiguriert ist, laden Sie die HTML‑Datei. Der Konstruktor, der einen Dateipfad und eine `SandboxConfiguration` entgegennimmt, wendet automatisch alle von uns definierten Einstellungen an. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +Wenn Sie von einer entfernten URL laden müssen, ersetzen Sie den Dateipfad durch den URL‑String – Aspose.HTML wird weiterhin den **festgelegten benutzerdefinierten User‑Agent** und die **Bildschirmabmessungen** berücksichtigen. + +## Schritt 5: Das verarbeitete Ergebnis speichern + +Nachdem das Dokument das Laden abgeschlossen hat, können Sie es in einem beliebigen unterstützten Format speichern. Hier schreiben wir eine sandbox‑geprüfte HTML‑Datei, die alle DOM‑Änderungen widerspiegelt, die durch die benutzerdefinierten Einstellungen verursacht wurden. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +Die gespeicherte Datei enthält das gleiche Markup, aber Skripte, die `navigator.userAgent` abgefragt oder `window.innerWidth` inspiziert haben, sehen nun die von Ihnen bereitgestellten Werte. + +## Vollständiges, ausführbares Beispiel + +Wenn Sie alle Schritte zusammenfügen, erhalten Sie ein eigenständiges Programm, das Sie kopieren, einfügen und ausführen können. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Erwartete Ausgabe + +Das Ausführen des Programms erzeugt `sandboxed_output.html`. Wenn Sie diese Datei in einem Browser öffnen und `navigator.userAgent` über die Konsole inspizieren, sehen Sie **AsposeHTML/1.0**. Ebenso wird `window.innerWidth` **1024** melden, was bestätigt, dass **die Bildschirmabmessungen festgelegt** wie beabsichtigt funktioniert haben. + +## Häufige Fragen & Edge‑Case‑Behandlung + +| Frage | Antwort | +|----------|--------| +| **Was, wenn die Seite zusätzliche Ressourcen von einer anderen Domain lädt?** | Die Sandbox leitet den **benutzerdefinierten User‑Agent** bei jeder Anfrage weiter, aber Cross‑Origin‑Richtlinien gelten weiterhin. Verwenden Sie `sandboxConfig.setAllowCrossDomain(true)`, wenn Sie diese Beschränkungen lockern müssen. | +| **Kann ich die Bildschirmgröße ändern, nachdem das Dokument geladen wurde?** | Nein. Die Bildschirmabmessungen werden während des initialen Layout‑Durchlaufs gelesen. Um mit einer anderen Größe zu rendern, erstellen Sie eine neue `SandboxConfiguration` und laden das Dokument erneut. | +| **Muss ich `document.close()` aufrufen?** | Das `HTMLDocument` implementiert `AutoCloseable`. Die Verwendung eines try‑with‑resources‑Blocks sorgt für ordnungsgemäße Bereinigung, aber ein explizites `close()` ist in einfachen Skripten optional. | +| **Wie unterscheidet sich das vom Setzen eines User‑Agents in einem HTTP‑Client?** | Das Setzen des User‑Agents in der Sandbox beeinflusst **alle** Ressourcenanfragen, die von der HTML‑Engine gestellt werden, nicht nur den initialen HTML‑Abruf. Das ahmt einen echten Browser genauer nach. | +| **Ist die Sandbox sicher für nicht vertrauenswürdiges HTML?** | Ja. Die Sandbox isoliert den Dateisystemzugriff und begrenzt Netzwerkaufrufe gemäß der Konfiguration, wodurch das Risiko reduziert wird, dass bösartige Skripte Ihre Host‑JVM beeinflussen. | + +## Pro‑Tipps + +* **Konfigurationen wiederverwenden** – Wenn Sie viele Seiten mit demselben Viewport rendern, erstellen Sie eine einzelne `SandboxConfiguration` und verwenden Sie sie erneut, um den Overhead bei der Objekterstellung zu vermeiden. +* **Mit Logging debuggen** – Aktivieren Sie das Aspose.HTML‑Logging (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`), um zu sehen, welche Ressourcen mit dem benutzerdefinierten User‑Agent abgerufen wurden. +* **Mit CSS‑Media‑Queries kombinieren** – Durch Anpassen der **Bildschirmbreite** können Sie testen, wie Ihr responsives Design auf Tablets, Handys oder großen Desktops funktioniert, ohne einen echten Browser zu öffnen. + +## Fazit + +Sie wissen jetzt, wie Sie **einen benutzerdefinierten User‑Agent festlegen** und **Bildschirmabmessungen festlegen** können, wenn Sie HTML mit Aspose.HTML für Java rendern. Durch die Konfiguration einer Sandbox isolieren Sie die Umgebung, steuern das Viewport und stellen sicher, dass externe Ressourcen die exakt von Ihnen angegebenen Header sehen. Diese Technik ist entscheidend zum Testen responsiver Layouts, zum Umgehen von Bot‑Blockaden oder zum Reproduzieren von Desktop‑Only‑Funktionen in automatisierten Pipelines. + +Als Nächstes könnten Sie **wie man benutzerdefinierte Cookies setzt** oder **gerenderte Screenshots erfasst** mit der Rendering‑API von Aspose.HTML erkunden – beide Konzepte basieren auf dem gleichen Sandbox‑Konfigurations‑Muster, das Sie gerade gemeistert haben. + +Viel Spaß beim Coden! + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [High‑DPI‑Rendering in Java – Webseiten‑Screenshots mit benutzerdefiniertem User‑Agent erfassen](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [Wie man HTML lädt, Geräte‑DPI festlegt & Hintergrundfarbe ausliest](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [HTML‑Datei in Java erstellen & Netzwerk‑Service einrichten (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/java/creating-managing-html-documents/_index.md b/html/german/java/creating-managing-html-documents/_index.md index 46e3d76189..103400a82d 100644 --- a/html/german/java/creating-managing-html-documents/_index.md +++ b/html/german/java/creating-managing-html-documents/_index.md @@ -45,9 +45,9 @@ Wenn es um die Generierung neuer HTML-Dokumente geht, bietet Aspose.HTML für Ja ### [Erstellen Sie asynchron HTML-Dokumente in Aspose.HTML für Java](./create-html-documents-async/) Meistern Sie die asynchrone Erstellung von HTML-Dokumenten mit Aspose.HTML für Java. Schritt‑für‑Schritt‑Anleitung, Tipps und FAQs für schnelles Lernen enthalten. ### [Erstellen Sie leere HTML-Dokumente in Aspose.HTML für Java](./create-empty-html-documents/) -Erfahren Sie mit unserem ausführlichen Schritt-für-Schritt-Tutorial, wie Sie mit Aspose.HTML leere HTML-Dokumente in Java erstellen. Es ist ideal für Entwickler aller Niveaus. +Erfahren Sie mit unserem ausführlichen Schritt-für-Schritt‑Tutorial, wie Sie mit Aspose.HTML leere HTML-Dokumente in Java erstellen. Es ist ideal für Entwickler aller Niveaus. ### [Laden Sie HTML-Dokumente aus einer Datei in Aspose.HTML für Java](./load-html-documents-from-file/) -Entfesseln Sie die Möglichkeiten der HTML-Manipulation mit Aspose.HTML für Java. Lernen Sie mit Schritt-für-Schritt-Tutorials, HTML-Dokumente aus Dateien zu laden. +Entfesseln Sie die Möglichkeiten der HTML-Manipulation mit Aspose.HTML für Java. Lernen Sie mit Schritt‑für‑Schritt‑Tutorials, HTML-Dokumente aus Dateien zu laden. ### [Erweitertes Laden von Dateien für HTML-Dokumente in Aspose.HTML für Java](./advanced-file-loading-html-documents/) Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie HTML-Dokumente mit Aspose.HTML für Java laden, bearbeiten und speichern. Schalten Sie die erweiterte HTML-Verarbeitung in Ihren Java-Projekten frei. ### [Laden Sie HTML-Dokumente aus dem Stream mit Aspose.HTML für Java](./load-html-documents-from-stream/) @@ -70,12 +70,16 @@ Erfahren Sie, wie Sie in Aspose.HTML für Java eine sichere Sandbox für HTML er Erfahren Sie, wie Sie HTML-Inhalte in Java abfragen und verarbeiten – Schritt‑für‑Schritt‑Anleitung für vollständiges Verständnis. ### [Text aus HTML in Java extrahieren – Vollständiger Programmierleitfaden](./extract-text-from-html-in-java-complete-programming-guide/) Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie mit Aspose.HTML für Java Text aus HTML extrahieren. - ### [HTML-Dokument in Java laden – Komplett‑Leitfaden mit XPath & CSS](./load-html-document-java-complete-guide-with-xpath-css/) Lernen Sie, HTML-Dokumente in Java zu laden und mit XPath und CSS zu analysieren – Schritt‑für‑Schritt‑Anleitung. - ### [HTML‑Zeichen in Java zählen – Vollständiger Leitfaden mit Aspose HTML](./count-html-characters-in-java-full-guide-with-aspose-html/) Erfahren Sie, wie Sie mit Aspose.HTML für Java die Anzahl von HTML‑Zeichen ermitteln – Schritt‑für‑Schritt‑Anleitung. +### [HTML‑Element in Java mit Aspose.HTML erstellen](./how-to-create-html-element-in-java-using-aspose-html/) +Erfahren Sie, wie Sie mit Aspose.HTML für Java HTML‑Elemente programmatisch erzeugen und in Ihre Anwendung integrieren. +### [HTML-Elemente in Java mit XPath zählen](./how-to-count-html-elements-in-java-with-xpath/) +Erfahren Sie, wie Sie mit XPath HTML‑Elemente in Java zählen können – kompakte Schritt‑für‑Schritt‑Anleitung. +### [Wie man Elemente nach Klasse in Java mit querySelectorAll auswählt](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Erfahren Sie, wie Sie mit querySelectorAll Elemente anhand ihrer CSS‑Klasse in Java auswählen. {{< /blocks/products/pf/tutorial-page-section >}} @@ -114,5 +118,4 @@ Erfahren Sie in dieser Schritt‑für‑Schritt‑Anleitung, wie Sie Text aus HT {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} - +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/german/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..0b6f6901fe --- /dev/null +++ b/html/german/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-09-29 +description: Erfahren Sie, wie Sie HTML-Elemente in Java mit Aspose.HTML und XPath + zählen. Dieser Leitfaden zeigt, wie man ein HTML-Dokument lädt, Knoten mit XPath + auswählt und eine Knotenliste erhält. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: de +lastmod: 2026-09-29 +og_description: Wie man HTML-Elemente in Java mit Aspose.HTML zählt. Folgen Sie diesem + vollständigen Tutorial, um ein HTML-Dokument zu laden, Knoten mit XPath auszuwählen, + XPath in Java auszuwerten und eine Knotenliste zu erhalten. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: Wie man HTML-Elemente in Java zählt – Schritt‑für‑Schritt‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: Wie man HTML‑Elemente in Java mit XPath zählt +url: /de/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man HTML-Elemente in Java mit XPath zählt + +Wenn Sie **HTML-Elemente zählen** in einer Webseite aus einer Java‑Anwendung heraus benötigen, bietet Ihnen dieser Leitfaden eine komplette, sofort ausführbare Lösung. Nach den ersten beiden Sätzen wissen Sie genau, wie Sie ein HTML‑Dokument laden, Knoten mit XPath auswählen und eine NodeList abrufen, die Sie zählen können. + +Wir verwenden die Aspose.HTML for Java Bibliothek, weil sie ein DOM‑kompatibles API und eine leistungsstarke XPath‑Engine bereitstellt. Das Tutorial deckt alles ab, was Sie benötigen — Imports, Code, Erklärungen und erwartete Ausgabe — so dass Sie das Beispiel in Ihr Projekt kopieren und sofort Ergebnisse sehen können. Unterwegs gehen wir auch auf **select nodes with XPath**, **get node list Java**, **load HTML document Java** und **evaluate XPath in Java** ein. + +## Was Sie erreichen werden + +* Eine HTML‑Datei vom Dateisystem laden. +* Einen XPath‑Ausdruck erstellen, der bestimmte Elemente anspricht. +* Den XPath‑Ausdruck gegen das Dokument auswerten. +* Eine `NodeList` abrufen und zählen, wie viele passende Elemente existieren. + +Keine externen Dienste oder komplexe Konfigurationen sind erforderlich; lediglich die Aspose.HTML‑JAR auf Ihrem Klassenpfad. + +--- + +## Wie man HTML-Elemente mit XPath in Java zählt + +Dieser Schritt‑für‑Schritt‑Abschnitt zeigt den genauen Code, den Sie benötigen. Jeder Unterabschnitt entspricht einem logischen Teil des Prozesses, wodurch es einfach ist, anzupassen oder zu erweitern. + +### Schritt 1: Das HTML-Dokument in Java laden + +Zuerst wird die HTML‑Datei in den Speicher geladen. Die Klasse `HTMLDocument` parst die Datei und erstellt einen DOM‑Baum, den XPath abfragen kann. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Warum das wichtig ist:** +Das Laden des Dokuments erzeugt eine DOM‑Repräsentation, die für jede XPath‑Auswertung erforderlich ist. Ist der Dateipfad falsch, wirft Aspose.HTML eine `FileNotFoundException`, prüfen Sie also den Speicherort von `input.html` erneut. + +### Schritt 2: Einen XPath-Ausdruck erstellen und auswerten + +Jetzt erstellen wir einen XPath, der die Elemente auswählt, die wir zählen wollen. In diesem Beispiel zählen wir alle ``‑Tags, deren `alt`‑Attribut den Wert "logo" hat. + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Warum das wichtig ist:** +Der Ausdruck `//img[@alt='logo']` ist eine kompakte Möglichkeit, **select nodes with XPath** zu verwenden. Der Aufruf `evaluate` **evaluate XPath in Java** und liefert ein generisches `XPathResult`. Durch das Casten zu `NodeList` erhalten wir direkten Zugriff auf die Sammlung der passenden Knoten. + +### Schritt 3: Die NodeList abrufen und zählen + +Abschließend zählen wir, wie viele Knoten zurückgegeben wurden. Die `NodeList`‑API stellt dafür `getLength()` bereit. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Warum das wichtig ist:** +`getLength()` ist der einfachste Weg, um **get node list Java** zu erhalten und eine Zählung zu bekommen. Wenn der XPath keine Elemente findet, ist die Länge `0`, was Ihre Anwendung elegant handhaben kann. + +### Vollständiges ausführbares Beispiel + +Unten finden Sie das komplette Programm, inklusive aller Importe und einer minimalen `main`‑Methode. Kopieren Sie es in eine Datei namens `CountHtmlElements.java`, fügen Sie die Aspose.HTML‑JAR zu Ihrem Projekt hinzu und führen Sie es aus. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Erwartete Ausgabe** + +Wenn `input.html` drei `logo`‑Tags enthält, gibt das Programm aus: + +``` +Found 3 logo images. +``` + +Wenn solche Bilder nicht existieren, gibt es aus: + +``` +Found 0 logo images. +``` + +--- + +## Häufige Variationen und Randfälle + +| Situation | Was zu ändern ist | Grund | +|-----------|-------------------|-------| +| Ein anderes Element zählen (z. B. `
` mit Klasse `header`) | Ändern Sie den XPath zu `//div[@class='header']` | XPath‑Syntax ermöglicht das Anvisieren jedes Tags/Attributs. | +| Alle Elemente zählen, unabhängig vom Attribut | Verwenden Sie `//*` als XPath‑Ausdruck | `//*` wählt jeden Elementknoten im Dokument aus. | +| Große Dokumente verursachen Speicherbelastung | Verwenden Sie einen Streaming‑Parser oder werten Sie XPath auf einem Fragment aus | Aspose.HTML bietet `HTMLDocumentFragment` für partielles Parsen. | +| Benötigen Sie die tatsächlichen Knoten, nicht nur die Zählung | Iterieren Sie über `nodes.item(i)` | Sie können jeden Knoten nach dem Zählen verarbeiten. | + +**Pro‑Tipp:** Validieren Sie stets den XPath‑String, bevor Sie ihn an `createXPathExpression` übergeben. Ein ungültiger Ausdruck wirft `XPathException`, die Sie abfangen können, um eine benutzerfreundliche Fehlermeldung bereitzustellen. + +--- + +## Fehlerbehebung‑Checkliste + +1. **Bibliothek nicht gefunden** — Stellen Sie sicher, dass die Aspose.HTML for Java JAR auf dem Klassenpfad (`-cp` oder in den Abhängigkeiten Ihrer IDE) liegt. +2. **Datei nicht gefunden** — Überprüfen Sie, dass `input.html` relativ zum Arbeitsverzeichnis liegt oder verwenden Sie einen absoluten Pfad. +3. **Keine Ergebnisse** — Prüfen Sie die Attributwerte und die Groß‑/Kleinschreibung (`alt='logo'` vs `alt='Logo'`). XPath ist case‑sensitive. +4. **Performance‑Bedenken** — Verwenden Sie eine einzelne `HTMLDocument`‑Instanz erneut, wenn Sie viele XPath‑Abfragen auf derselben Datei ausführen müssen. + +--- + +## Fazit + +Sie wissen jetzt, **wie man HTML‑Elemente** in Java mit Aspose.HTML und XPath zählt. Durch das Laden des HTML‑Dokuments, das Erstellen eines XPath‑Ausdrucks, das **evaluate XPath in Java** und das Abrufen einer **node list**, können Sie schnell die Anzahl passender Elemente bestimmen. Diese Technik funktioniert für jedes Tag oder Attribut und ist ein vielseitiges Werkzeug für Web‑Scraping, automatisierte Tests oder Inhaltsanalyse. + +Die nächsten Schritte, die Sie erkunden könnten, umfassen: + +* Verwendung von **select nodes with XPath**, um Attributwerte zu extrahieren (z. B. Bild‑`src`). +* Kombinieren mehrerer XPath‑Abfragen, um einen Bericht über Element‑Statistiken zu erstellen. +* Integration dieser Logik in einen größeren Java‑Service, der HTML‑Dateien stapelweise verarbeitet. + +Fühlen Sie sich frei, mit verschiedenen XPath‑Ausdrücken und Dokumentstrukturen zu experimentieren — das Zählen von HTML‑Elementen ist nur der Anfang! + +## Was Sie als Nächstes lernen sollten? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man HTML in Java parst — Laden, Abfragen & Elemente zählen](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [Wie man HTML in Java abfragt — Elemente auswählen, nach Attribut filtern und Text erhalten](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [HTML‑Dokument in Java laden — Kompletter Leitfaden mit XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/german/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..bada2fb6c0 --- /dev/null +++ b/html/german/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,186 @@ +--- +category: general +date: 2026-09-29 +description: Erfahren Sie, wie Sie ein HTML‑Element in Java erstellen, einen Absatz + hinzufügen, dessen Text festlegen und es mit Aspose.HTML an den Body anhängen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: de +lastmod: 2026-09-29 +og_description: Erstellen Sie ein HTML-Element in Java, indem Sie einen Absatz hinzufügen, + dessen Text festlegen und es mit Aspose.HTML an den Body anhängen. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: HTML-Element in Java erstellen – Schritt‑für‑Schritt Aspose.HTML‑Leitfaden +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: Wie man ein HTML-Element in Java mit Aspose.HTML erstellt +url: /de/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man ein HTML‑Element in Java mit Aspose.HTML erstellt + +Wenn Sie ein **HTML‑Element** in einer Java‑Anwendung **erstellen** müssen, zeigt Ihnen diese Anleitung eine vollständige, ausführbare Lösung. Sie sehen, wie Sie **einen Absatz hinzufügen**, dessen Text setzen und das **Element an den Body** einer bestehenden HTML‑Datei mit Aspose.HTML **anhängen**. + +Das Tutorial deckt alles ab, vom Laden eines Dokuments bis zum Speichern der modifizierten Datei, sodass Sie den Code einfach in Ihr eigenes Projekt übernehmen können, ohne weitere Recherche. + +## Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben: + +* Java 17 oder neuer installiert. +* Aspose.HTML for Java 23.10 (oder die neueste Version) zu Ihrem Projekt‑Classpath hinzugefügt. +* Eine einfache `input.html`‑Datei in einem bekannten Verzeichnis. Die Datei kann leer sein (``) oder bereits Markup enthalten. + +## Schritt 1: Das vorhandene HTML‑Dokument laden + +Das Laden der Quelldatei liefert Ihnen einen manipulierbaren DOM‑Baum. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +Der Konstruktor `HTMLDocument` parsed die Datei und erzeugt ein lebendes DOM. Kann die Datei nicht gelesen werden, wirft Aspose.HTML eine `IOException`; Sie können die Ausnahme weiterreichen oder mit einem try‑catch‑Block behandeln. + +## Schritt 2: Ein neues `

`‑Element erstellen und Text zu HTML hinzufügen + +Ein neues Element zu erzeugen ist ähnlich wie die Verwendung von `document.createElement` im Browser. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` erzeugt automatisch einen Text‑Knoten und hängt ihn an das Element an – dies ist der empfohlene Weg, **Text zu HTML hinzuzufügen**. Diese Methode escaped außerdem Zeichen, die das Markup beschädigen könnten. + +## Schritt 3: Element an den Body anhängen + +Jetzt, wo der Absatz fertig ist, müssen Sie ihn innerhalb des `` des Dokuments platzieren. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` liefert den ``‑Knoten, und `appendChild` fügt das neue `

` als letztes Kind ein. Sollte das Dokument kein ``‑Element besitzen (unwahrscheinlich bei einer wohlgeformten HTML‑Datei), erzeugt Aspose.HTML automatisch eines. + +## Schritt 4: Das modifizierte Dokument speichern + +Zum Schluss schreiben Sie das aktualisierte DOM zurück auf die Festplatte. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` serialisiert das DOM, bewahrt das vorhandene Markup und fügt den neuen Absatz hinzu. Die resultierende `output.html` wird folgendes enthalten: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Vollständiger Quellcode (java html Beispiel) + +Alle Schritte zusammen ergeben ein eigenständiges Programm, das Sie sofort ausführen können. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### Was der Code macht + +| Schritt | Aktion | Warum das wichtig ist | +|---------|--------|-----------------------| +| Dokument laden | `new HTMLDocument(...)` | Parsed das Quell‑HTML in ein DOM, das Sie manipulieren können. | +| Element erstellen | `doc.createElement("p")` | Entspricht der Browser‑API und stellt sicher, dass das Element den HTML‑Standards folgt. | +| Text setzen | `setTextContent(...)` | Garantiert korrektes Escaping und vermeidet die manuelle Erstellung von Text‑Knoten. | +| An Body anhängen | `doc.getBody().appendChild(...)` | Platziert das neue Element dort, wo Browser es rendern. | +| Datei speichern | `doc.save(...)` | Persistiert die Änderungen und erzeugt eine gültige HTML‑Datei für die weitere Verwendung. | + +## Häufige Varianten und Sonderfälle + +* **Mehrere Elemente hinzufügen** – Wiederholen Sie die Schritte 2‑3 für jeden neuen Knoten, bevor Sie `save` aufrufen. +* **Vor einem bestimmten Knoten einfügen** – Verwenden Sie `insertBefore(newNode, referenceNode)` anstelle von `appendChild`. +* **Mit Fragmenten arbeiten** – `doc.createDocumentFragment()` ermöglicht das Erstellen einer Gruppe von Knoten, die in einem Vorgang angehängt werden, was die Performance bei großen Updates verbessert. +* **UTF‑8‑Zeichen behandeln** – Aspose.HTML schreibt automatisch UTF‑8; stellen Sie nur sicher, dass Ihre Quelldatei ebenfalls so kodiert ist. + +## Praktische Tipps + +* **Pfad‑Handling** – Nutzen Sie `java.nio.file.Paths`, um plattformunabhängige Dateipfade zu erstellen. +* **Ausnahmesicherheit** – Packen Sie den gesamten Block in ein try‑with‑resources‑Statement, wenn Sie zusätzliche Streams schließen müssen. +* **Performance** – Bei sehr großen HTML‑Dateien sollten Sie das Dokument mit `HTMLDocument(String, LoadOptions)` laden, wobei Sie externe Ressourcen deaktivieren können, um das Parsen zu beschleunigen. + +## Ergebnis überprüfen + +Nach dem Ausführen des Programms öffnen Sie `output.html` in einem beliebigen Browser. Sie sollten den Absatz „Added by Aspose.HTML“ sehen, der dort erscheint, wo der ursprüngliche Body endet. Untersuchen Sie den Quellcode der Seite, um zu bestätigen, dass das `

`‑Element innerhalb von `` vorhanden ist. + +## Fazit + +Sie wissen jetzt, wie man **HTML‑Elemente** in Java **erstellt**, **einen Absatz hinzufügt**, **Text zu HTML hinzufügt** und **ein Element an den Body anhängt** mit Aspose.HTML. Das vollständige **java html Beispiel** demonstriert einen sauberen, produktionsreifen Workflow, den Sie erweitern können, um jeden Teil eines HTML‑Dokuments zu manipulieren. + +Als Nächstes können Sie verwandte Themen wie **Attribute ändern**, **Knoten entfernen** oder **mit CSS‑Stilen arbeiten** erkunden, um umfangreichere HTML‑Verarbeitungspipelines zu bauen. Viel Spaß beim Coden! + +## Was Sie als Nächstes lernen sollten + + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Create new html element with Java – Full Aspose.HTML Guide](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [append child to body in Java – Full Aspose.HTML Tutorial](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Append Element to Body with Aspose.HTML for Java using a DOM Mutation Observer](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/german/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..cd56435eda --- /dev/null +++ b/html/german/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,255 @@ +--- +category: general +date: 2026-09-29 +description: Lernen Sie, wie man Elemente nach Klasse auswählt, HTML aus einer Datei + liest und externe Links in Java findet. Diese Schritt‑für‑Schritt‑Anleitung behandelt + das effiziente Durchlaufen einer NodeList. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: de +lastmod: 2026-09-29 +og_description: Wählen Sie Elemente nach Klasse in Java aus, lesen Sie HTML aus einer + Datei und finden Sie externe Links mit querySelectorAll. Folgen Sie dem vollständigen + Beispiel, um eine NodeList zu iterieren. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Elemente nach Klasse in Java auswählen – vollständiger Leitfaden mit querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: Wie man in Java Elemente per Klasse mit querySelectorAll auswählt +url: /de/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man Elemente nach Klasse in Java mit querySelectorAll auswählt + +Wenn Sie **Elemente nach Klasse** beim Verarbeiten einer HTML‑Datei in Java auswählen müssen, zeigt Ihnen diese Anleitung genau, wie das geht. Sie lernen, HTML aus einer Datei zu lesen, `querySelectorAll` zu verwenden, um externe Links zu finden, und die resultierende `NodeList` sicher zu iterieren. + +Die Arbeit mit HTML in Java wirkt oft schwerfällig, aber moderne Bibliotheken bieten Ihnen eine kompakte, CSS‑Selektor‑basierte API. Das nachfolgende Beispiel verwendet **jsoup** (Version 1.17.2), weil es `querySelectorAll`‑artige Selektoren implementiert und eine `Elements`‑Sammlung zurückgibt, die sich wie eine `NodeList` verhält. Sie können dieselbe Logik bei Bedarf an andere DOM‑Implementierungen anpassen. + +## Voraussetzungen + +Bevor Sie beginnen, stellen Sie sicher, dass Sie folgendes haben: + +* JDK 17 oder neuer installiert. +* Maven oder Gradle für das Abhängigkeitsmanagement. +* Grundlegende Kenntnisse von Java‑Streams und dem DOM‑Modell. + +Fügen Sie jsoup zu Ihrem Projekt hinzu: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## Schritt 1: HTML aus Datei lesen + +Die erste Aufgabe besteht darin, das HTML‑Dokument von der Festplatte zu laden. `Jsoup.parse(Path, Charset)` liest die Datei und erstellt einen DOM‑Baum, den Sie abfragen können. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Warum das wichtig ist*: Das Laden der Datei einmal vermeidet wiederholte I/O‑Operationen, während Sie später über die Elemente iterieren. Das `Document`‑Objekt enthält das komplette DOM und ermöglicht schnelle Selektor‑Abfragen. + +## Schritt 2: `querySelectorAll` verwenden, um Elemente nach Klasse auszuwählen + +Jetzt, wo das Dokument im Speicher ist, können Sie **Elemente nach Klasse** mit einem CSS‑Selektor auswählen. Der Selektor `"a.external"` trifft auf ``‑Tags zu, die die Klasse `external` besitzen – genau das, was Sie benötigen, um **externe Links zu finden**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Warum das wichtig ist*: Die Verwendung eines Klassenselektors ist sowohl ausdrucksstark als auch performant. Die Bibliothek übersetzt den Selektor in eine optimierte Traversierung, sodass Sie keine manuellen Schleifen über jeden Knoten schreiben müssen. + +## Schritt 3: Die NodeList (Elements) in Java iterieren + +`Elements` implementiert `Iterable`, was bedeutet, dass Sie eine Standard‑`for‑each`‑Schleife verwenden können, um **NodeList‑Java**‑Objekte zu **iterieren**. Die Schleife unten gibt das `href`‑Attribut jedes Links aus. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Warum das wichtig ist*: Direkte Iteration hält den Code lesbar und vermeidet den Overhead, die Sammlung in einen Stream zu konvertieren, wenn Sie nur eine einfache Ausgabe benötigen. + +## Vollständiges funktionierendes Beispiel + +Wenn Sie die drei Schritte zusammenführen, erhalten Sie ein eigenständiges Programm, das Sie über die Befehlszeile ausführen können. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Erwartete Ausgabe + +Angenommen, `input.html` enthält: + +```html +Example +About +OpenAI +``` + +Das Ausführen des Programms gibt aus: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Profi‑Tipps und häufige Fallstricke + +* **Encoding matters** – Lesen Sie die Datei immer mit UTF‑8 (oder dem Zeichensatz, der Ihrer Quelle entspricht). Eine falsche Kodierung kann Zeichen in Attributwerten beschädigen. +* **Multiple classes** – Wenn ein Element mehrere Klassen hat (z. B. `class="btn external"`), trifft der Selektor `"a.external"` weiterhin zu, weil CSS‑Klassenselektoren das Vorhandensein des Tokens prüfen, nicht den exakten String. +* **Performance tip** – Wenn Sie nur das `href`‑Attribut benötigen, können Sie es direkt mit `doc.select("a.external[href]").eachAttr("href")` anfordern. Das vermeidet das Erzeugen vollständiger `Element`‑Objekte für jede Übereinstimmung. +* **Null safety** – `link.attr("href")` gibt einen leeren String zurück, wenn das Attribut fehlt, sodass Sie vor dem Ausgeben keine Null‑Prüfung benötigen. + +## Häufig gestellte Fragen + +**Q: Funktioniert das mit HTML‑Fragmenten, denen ein ``‑Root fehlt?** +A: Ja. `Jsoup.parse` behandelt die Eingabe als Fragment und fügt fehlende Root‑Elemente automatisch hinzu, sodass Selektoren im Body des Fragments funktionieren. + +**Q: Kann ich `querySelectorAll` ohne jsoup verwenden?** +A: Die standardmäßige Java‑DOM‑API (`org.w3c.dom`) enthält kein `querySelectorAll`. Bibliotheken wie **HTMLUnit** oder **jodd-lagarto** bieten ähnliche Methoden. Das hier gezeigte Muster – laden, mit CSS auswählen, iterieren – bleibt gleich. + +**Q: Was ist, wenn ich die Links ändern muss, anstatt sie nur auszugeben?** +A: Nachdem Sie jedes `Element` erhalten haben, können Sie `link.attr("href", "newUrl")` aufrufen und das Dokument anschließend mit `Files.writeString` zurück auf die Festplatte schreiben. + +## Fazit + +Sie wissen jetzt, wie man **Elemente nach Klasse** auswählt, **HTML aus einer Datei liest**, **externe Links findet** und **eine NodeList in Java** mit `querySelectorAll`‑artigen Selektoren iteriert. Das vollständige Beispiel zeigt einen sauberen, produktionsbereiten Workflow, den Sie in größere Scraping‑ oder Transformations‑Pipelines einbinden können. + +Als Nächstes können Sie verwandte Themen erkunden, wie **dynamischen Content mit HTMLUnit parsen**, **modifiziertes HTML zurück auf die Festplatte schreiben** oder **Java‑Streams verwenden, um Link‑URLs in einer Liste zu sammeln**. Jeder dieser Punkte baut auf der hier gezeigten Kerntechnik der klassenbasierten Auswahl auf. Viel Spaß beim Coden! + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige, funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, weitere API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man HTML in Java abfragt – Elemente auswählen, nach Attribut filtern und Text erhalten](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [NodeList in Java iterieren – HTML lesen & Bild‑src erhalten](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [HTML‑Dokumente aus Datei in Aspose.HTML für Java laden](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/java/css-html-form-editing/_index.md b/html/german/java/css-html-form-editing/_index.md index d645c3aee1..70012cc9a5 100644 --- a/html/german/java/css-html-form-editing/_index.md +++ b/html/german/java/css-html-form-editing/_index.md @@ -41,10 +41,12 @@ Erfahren Sie, wie Sie mit Aspose.HTML für Java CSS aus HTML-Dokumenten extrahie Erfahren Sie, wie Sie mit Aspose.HTML für Java Elemente anhand ihrer CSS‑Klasse auswählen und verarbeiten – Schritt‑für‑Schritt‑Anleitung. ### [Wie man CSS in Java liest – Komplett‑Anleitung mit Aspose.HTML](./how-to-read-css-in-java-complete-guide-with-aspose-html/) Erfahren Sie, wie Sie mit Aspose.HTML für Java CSS-Dateien programmgesteuert lesen und verarbeiten – Schritt‑für‑Schritt‑Anleitung. -### [HTML mit Java parsen: CSS-Eigenschaft extrahieren und Schriftgröße ermitteln](./parse-html-with-java-extract-css-property-and-get-font-size/) -Lernen Sie, wie Sie mit Aspose.HTML für Java HTML analysieren, CSS-Eigenschaften auslesen und die Schriftgröße von Elementen bestimmen. -### [Wie man HTML in Java abfragt – HTML laden, CSS-Selektor verwenden und Überschriften extrahieren](./how-to-query-html-in-java-load-html-css-selector-and-extract/) -Erfahren Sie, wie Sie mit Aspose.HTML für Java HTML laden, CSS-Selektoren nutzen und Überschriften programmgesteuert extrahieren. +### [HTML mit Java parsen: CSS‑Eigenschaft extrahieren und Schriftgröße ermitteln](./parse-html-with-java-extract-css-property-and-get-font-size/) +Lernen Sie, wie Sie mit Aspose.HTML für Java HTML analysieren, CSS‑Eigenschaften auslesen und die Schriftgröße von Elementen bestimmen. +### [Wie man HTML in Java abfragt – HTML laden, CSS‑Selektor verwenden und Überschriften extrahieren](./how-to-query-html-in-java-load-html-css-selector-and-extract/) +Erfahren Sie, wie Sie mit Aspose.HTML für Java HTML laden, CSS‑Selektoren nutzen und Überschriften programmgesteuert extrahieren. +### [Wie man CSS aus HTML mit Aspose.HTML in Java liest](./how-to-read-css-from-html-with-aspose-html-in-java/) +Erfahren Sie, wie Sie mit Aspose.HTML für Java CSS aus einer HTML‑Datei auslesen und verarbeiten können – Schritt‑für‑Schritt‑Anleitung. {{< /blocks/products/pf/tutorial-page-section >}} @@ -63,7 +65,7 @@ Erfahren Sie, wie Sie mit Aspose.HTML für Java den berechneten Stil eines Eleme {{< blocks/products/products-backtop-button >}} ### [Ermitteln des berechneten Stils eines Elements in Java – Vollständige Schritt‑für‑Schritt‑Anleitung](./get-element-computed-style-in-java-full-step-by-step-guide/) Lernen Sie, wie Sie mit Aspose.HTML für Java den berechneten CSS‑Stil eines Elements ermitteln und nutzen – ein vollständiger Leitfaden. -### [Wie man getComputedStyle in Java verwendet – Hintergrundfarbe und weitere CSS-Eigenschaften extrahieren](./how-to-use-getcomputedstyle-in-java-extract-background-color/) +### [Wie man getComputedStyle in Java verwendet – Hintergrundfarbe und weitere CSS‑Eigenschaften extrahieren](./how-to-use-getcomputedstyle-in-java-extract-background-color/) Lernen Sie, wie Sie mit Aspose.HTML für Java getComputedStyle nutzen, um Hintergrundfarbe und weitere CSS‑Eigenschaften programmgesteuert zu ermitteln. ### [HTML in Java abfragen – Elemente auswählen, nach Attribut filtern und Textinhalt erhalten](./how-to-query-html-in-java-select-elements-filter-by-attribut/) Erfahren Sie, wie Sie mit Aspose.HTML für Java HTML‑Dokumente abfragen, Elemente nach Attribut filtern und deren Textinhalt extrahieren. diff --git a/html/german/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/german/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..bc8a57bc8d --- /dev/null +++ b/html/german/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,263 @@ +--- +category: general +date: 2026-09-29 +description: Wie man CSS aus HTML mit Aspose.HTML für Java liest. Lernen Sie, ein + Element nach ID auszuwählen, den berechneten Stil zu erhalten, CSS‑Eigenschaften + zu extrahieren und die Hintergrundfarbe anzuzeigen. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: de +lastmod: 2026-09-29 +og_description: Wie man CSS aus HTML mit Aspose.HTML für Java liest. Schritt‑für‑Schritt‑Anleitung + zum Auswählen eines Elements nach ID, zum Abrufen des berechneten Stils, zum Extrahieren + von CSS und zur Anzeige der Hintergrundfarbe. +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: Wie man CSS aus HTML mit Aspose.HTML liest – Java‑Leitfaden +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: Wie man CSS aus HTML mit Aspose.HTML in Java liest +url: /de/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man CSS aus HTML mit Aspose.HTML in Java liest + +Wenn Sie **wie man CSS liest** aus einer HTML‑Datei in einer Java‑Anwendung benötigen, zeigt Ihnen dieser Leitfaden genau, wie es geht. Am Ende der ersten beiden Sätze wissen Sie, wie man ein Element nach ID auswählt, den berechneten Stil abruft und die Hintergrundfarbe anzeigt – alles mit Aspose.HTML. + +Wir führen Sie durch das Laden eines HTML‑Dokuments, das Auffinden eines bestimmten Elements, das Extrahieren des berechneten CSS und das Ausgeben des Hintergrund‑Farbwerts. Es werden keine externen Werkzeuge benötigt, außer der Aspose.HTML‑Bibliothek für Java, und der Code funktioniert mit Java 8+. + +## Was Sie lernen werden + +* Wie man CSS aus einem HTML‑Dokument mit Aspose.HTML liest. +* Wie man **select element by id** mit `querySelector` verwendet. +* Wie man **get computed style** für jeden DOM‑Knoten abruft. +* Wie man **extract CSS from HTML** extrahiert und einzelne Eigenschaften wie **display background color** ausliest. +* Häufige Fallstricke und Best‑Practice‑Tipps für zuverlässige CSS‑Extraktion. + +### Voraussetzungen + +* Java 8 oder neuer installiert. +* Maven oder Gradle zur Verwaltung der Aspose.HTML‑Abhängigkeit. +* Eine einfache HTML‑Datei (z. B. `input.html`), die ein Element mit einem `id`‑Attribut enthält, das Sie untersuchen möchten. + +--- + +## Schritt 1: Laden des HTML‑Dokuments (how to read css) + +Der erste Vorgang in jedem CSS‑Lese‑Workflow besteht darin, das Quell‑HTML zu laden. Aspose.HTML stellt die Klasse `HTMLDocument` bereit, die die Datei parst und ein DOM aufbaut, das Sie abfragen können. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Warum das wichtig ist:** Das Laden des Dokuments erzeugt ein vollständiges DOM, das eine zuverlässige Stilberechnung ermöglicht, die dem entspricht, was ein Browser erzeugen würde. Das Überspringen dieses Schrittes würde Ihnen nur Rohtext statt eines strukturierten Dokuments liefern. + +## Schritt 2: Element nach ID auswählen + +Um CSS für einen bestimmten Knoten zu extrahieren, benötigen Sie zunächst eine Referenz zu diesem Knoten. Die Methode `querySelector` akzeptiert jeden CSS‑Selektor und ist damit ideal für die Auswahl nach ID. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Warum `querySelector` verwenden?:** Es folgt derselben Selektorsyntax, die Sie in CSS verwenden, sodass Sie vertraute Muster wie `#myDiv`, `.className` oder Attribut‑Selektoren wiederverwenden können, ohne zusätzliche Parsing‑Logik. + +## Schritt 3: Berechneten Stil des Elements abrufen + +Sobald Sie das Element haben, kann Aspose.HTML den **computed style** berechnen – die endgültigen Werte nach Anwendung aller CSS‑Regeln, Vererbung und Vorgaben. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Warum den Stil berechnen?:** Der berechnete Stil spiegelt die tatsächlichen Werte wider, die ein Browser rendern würde, und nicht nur die rohen Deklarationen. Das ist entscheidend, wenn Sie den effektiven `background-color`, `font-size` oder irgendeine andere Eigenschaft kennen müssen. + +## Schritt 4: CSS‑Eigenschaft extrahieren und Hintergrundfarbe anzeigen + +Jetzt, da Sie die `StyleDeclaration` haben, können Sie jede CSS‑Eigenschaft auslesen. In diesem Beispiel konzentrieren wir uns auf **display background color**, aber derselbe Ansatz funktioniert für `font-size`, `margin` usw. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**Erwartete Ausgabe** + +``` +Background color: rgb(255, 0, 0) +``` + +Wenn das Element seine Hintergrundfarbe von einem übergeordneten Element oder einem Stylesheet erbt, wird der berechnete Wert diese Vererbung bereits enthalten. + +## Umgang mit Randfällen und Variationen + +### Element nicht gefunden +Wenn `querySelector` `null` zurückgibt, gibt der obige Code bereits einen Fehler aus und beendet das Programm. In der Produktion möchten Sie vielleicht eine benutzerdefinierte Ausnahme werfen oder auf ein Standard‑Element zurückgreifen. + +### Mehrere Elemente mit derselben ID (ungültiges HTML) +Obwohl IDs eindeutig sein sollten, kann fehlerhaftes HTML Duplikate enthalten. `querySelector` gibt die erste Übereinstimmung zurück. Um alle Treffer zu verarbeiten, verwenden Sie `querySelectorAll` und iterieren über die resultierende `NodeList`. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Unterschiedliche CSS‑Eigenschaften +Um **extract css from html** über die Hintergrundfarbe hinaus zu extrahieren, rufen Sie einfach den entsprechenden Getter auf `StyleDeclaration` auf. Häufige Getter sind: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +Wenn eine Eigenschaft nicht explizit gesetzt ist, gibt der Getter den berechneten Standard zurück (z. B. `display: block` für ein `
`). + +### Browser‑spezifische Präfixe +Aspose.HTML normalisiert vendor‑präfixierte Eigenschaften (z. B. `-webkit-transform`) in ihre standardmäßigen Entsprechungen, wenn möglich. Wenn Sie den Rohwert benötigen, können Sie die `StyleDeclaration`‑Karte direkt abfragen: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +## Vollständiges ausführbares Beispiel + +Unten finden Sie eine eigenständige Java‑Klasse, die alle Schritte zusammenführt. Ersetzen Sie `YOUR_DIRECTORY/input.html` durch den Pfad zu Ihrer HTML‑Datei. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +### Ausführen des Programms + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +Sie sollten die Hintergrundfarbe in der Konsole ausgegeben sehen, was bestätigt, dass Sie erfolgreich **wie man CSS liest**, **select element by id**, **get computed style** und **display background color** durchgeführt haben. + +## Best‑Practice‑Tipps (Pro‑Tipps) + +* **Cache the `HTMLDocument`** wenn Sie CSS aus vielen Elementen lesen müssen; das wiederholte Parsen der Datei beeinträchtigt die Leistung. +* **Validate the HTML** vor dem Laden – fehlerhaftes Markup kann zu fehlenden Knoten oder falschen berechneten Werten führen. +* **Use try‑with‑resources** (oder explizites `dispose`), um native Ressourcen, die von Aspose.HTML‑Objekten gehalten werden, freizugeben. +* **Log the full `StyleDeclaration`** beim Debuggen komplexer Styles: `System.out.println(computedStyle.getCssText());` liefert Ihnen einen Schnappschuss jeder berechneten Eigenschaft. + +## Fazit + +Sie wissen jetzt, **how to read CSS** aus einer HTML‑Datei in Java mit Aspose.HTML zu lesen. Durch das Laden des Dokuments, **selecting element by id**, **getting computed style** und **extracting the background‑color**‑Eigenschaft können Sie programmgesteuert jede Stilinformation untersuchen, die ein Browser anwenden würde. + +Ab hier können Sie die Lösung erweitern, um weitere CSS‑Attribute zu extrahieren, mehrere Elemente zu verarbeiten oder die Daten in ein UI‑Testing‑Framework zu integrieren. + +Viel Spaß beim Coden und fühlen Sie sich frei, mit verschiedenen Selektoren und Stil‑Eigenschaften zu experimentieren, um den Anforderungen Ihres Projekts gerecht zu werden! + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, zusätzliche API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Wie man CSS in Java erhält – Berechneten Stil mit Aspose.HTML abrufen](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [wie man CSS in Java liest – Vollständiger Leitfaden mit Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Berechneten Stil in Java erhalten – Hintergrundfarbe aus HTML extrahieren](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/german/java/editing-html-documents/_index.md b/html/german/java/editing-html-documents/_index.md index 8e2855f654..981d1bc04b 100644 --- a/html/german/java/editing-html-documents/_index.md +++ b/html/german/java/editing-html-documents/_index.md @@ -65,7 +65,9 @@ Erfahren Sie, wie Sie mit Aspose.HTML für Java ein Kind-Element zum Body hinzuf ### [Ändern Sie den h1-Text in MHTML mit Java – Vollständige Schritt‑für‑Schritt‑Anleitung](./change-h1-text-in-mhtml-with-java-full-step-by-step-guide/) Erfahren Sie, wie Sie den h1-Text in MHTML-Dateien mit Aspose.HTML für Java ändern – detaillierte Schritt‑für‑Schritt‑Anleitung. ### [Neues HTML-Element mit Java erstellen – Vollständige Aspose.HTML-Anleitung](./create-new-html-element-with-java-full-aspose-html-guide/) -Erfahren Sie, wie Sie mit Aspose.HTML für Java ein neues HTML-Element erstellen – Schritt-für-Schritt-Anleitung. +Erfahren Sie, wie Sie mit Aspose.HTML für Java ein neues HTML-Element erstellen – Schritt‑für‑Schritt‑Anleitung. +### [Wie man die Hintergrundfarbe mit JavaScript in Java ändert](./how-to-change-background-color-javascript-using-java/) +Erfahren Sie, wie Sie mit Aspose.HTML für Java die Hintergrundfarbe per JavaScript ändern. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/german/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/german/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..55b2fc040c --- /dev/null +++ b/html/german/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,246 @@ +--- +category: general +date: 2026-09-29 +description: Ändere die Hintergrundfarbe mit JavaScript in einer HTML-Datei mithilfe + von Java. Lerne, HTML in Java zu laden, JavaScript in HTML auszuführen und HTML + mit Java zu ändern, um einen neuen Seitenhintergrund zu erhalten. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: de +lastmod: 2026-09-29 +og_description: Hintergrundfarbe mit JavaScript in einer HTML‑Seite mithilfe von Java + ändern. Dieses Tutorial zeigt, wie man HTML in Java lädt, JavaScript in HTML ausführt + und den Seitenhintergrund programmatisch setzt. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: Hintergrundfarbe mit JavaScript und Java ändern – Schritt‑für‑Schritt‑Anleitung +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: Wie man die Hintergrundfarbe in JavaScript mit Java ändert +url: /de/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Wie man die Hintergrundfarbe mit JavaScript in Java ändert + +Wenn Sie die **change background color javascript** in einer bestehenden HTML-Datei ändern müssen, können Sie dies vollständig aus Java heraus tun, ohne einen Browser zu öffnen. Dieses Tutorial zeigt Ihnen, wie Sie **load html in java** ausführen, ein kleines JavaScript‑Snippet ausführen und dann **modify html with java**, sodass der Hintergrund der Seite aktualisiert wird. + +Die Lösung funktioniert mit der Open‑Source‑Bibliothek **HTMLUnit**, die einen Headless‑Browser bereitstellt, der JavaScript exakt so auswertet wie ein echter Browser. Am Ende dieser Anleitung haben Sie eine wiederverwendbare Methode, die **sets page background** auf jede gewünschte Farbe setzt. + +## Voraussetzungen + +| Was Sie benötigen | Warum es wichtig ist | +|-------------------|----------------------| +| Java 8 oder neuer | HTMLUnit erfordert mindestens Java 8. | +| Maven‑ oder Gradle‑Build‑Tool | Um die HTMLUnit‑Abhängigkeit automatisch zu beziehen. | +| Eine HTML‑Datei, die Sie bearbeiten möchten (z. B. `input.html`) | Das Quelldokument, das geladen und geändert wird. | + +Fügen Sie HTMLUnit zu Ihrem Projekt hinzu: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Profi‑Tipp:** Verwenden Sie die neueste stabile Version von HTMLUnit, um die genaueste JavaScript‑Engine zu erhalten. + +## Hintergrundfarbe mit JavaScript ändern – HTML in Java laden + +Der erste Schritt besteht darin, das HTML‑Dokument in ein `HTMLPage`‑Objekt zu laden. Dies gibt Ihnen eine DOM‑ähnliche API und einen JavaScript‑Ausführungskontext. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Warum das wichtig ist*: `WebClient` erstellt eine sandbox‑Umgebung, in der JavaScript ausgeführt werden kann, sodass Sie **run js in html** exakt so ausführen können, wie es ein Browser des Benutzers tun würde. + +## JavaScript in HTML ausführen, um den Seitenhintergrund zu setzen + +Sobald die Seite geladen ist, können Sie jeden JavaScript‑Ausdruck auswerten. Das untenstehende Snippet ändert den `backgroundColor`‑Stil des ``‑Elements. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Erklärung*: +- `document.body.style.backgroundColor` ist die standardmäßige DOM‑Eigenschaft für den Hintergrund der Seite. +- Durch Aufruf von `eval` führen wir **run js in html** aus, ohne ein echtes Browserfenster zu benötigen. +- Die Methode ist wiederverwendbar für jede Farbe und erfüllt die Anforderung **set page background**. + +## HTML mit Java ändern und das Ergebnis speichern + +Nachdem das Skript ausgeführt wurde, spiegelt das DOM den neuen Stil wider. Sie können das aktualisierte HTML nun zurück auf die Festplatte schreiben. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +Wenn Sie alles zusammenfügen, erhalten Sie ein einzelnes, ausführbares Programm: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### Erwartete Ausgabe + +Das Ausführen des Programms gibt aus: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +Das Öffnen von `js_modified.html` in einem beliebigen Browser zeigt die Seite mit einem hellblauen Hintergrund, was bestätigt, dass die **change background color javascript**‑Operation erfolgreich war. + +## Häufige Variationen und Sonderfälle + +| Situation | Wie man damit umgeht | +|-----------|----------------------| +| **Different color formats** | Geben Sie einen beliebigen CSS‑kompatiblen Wert an (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **Missing `` tag** | Das Skript schlägt stillschweigend fehl; Sie können zunächst sicherstellen, dass `` mit `page.getFirstByXPath("//body")` existiert. | +| **Large HTML files** | Deaktivieren Sie CSS (`setCssEnabled(false)`) und aktivieren Sie nur die JavaScript‑Funktionen, die Sie benötigen, um den Speicherverbrauch zu reduzieren. | +| **Running multiple scripts** | Rufen Sie `changeBackground` wiederholt auf oder erstellen Sie eine Hilfsmethode, die eine Liste von JavaScript‑Befehlen akzeptiert. | + +## Fazit + +Sie wissen jetzt, wie Sie **change background color javascript** durchführen, indem Sie eine HTML‑Datei in Java laden, **run js in html** und **modify html with java**, um **set page background** auf jede gewünschte Farbe zu setzen. Das obige vollständige Beispiel funktioniert mit der neuesten HTMLUnit‑Bibliothek und kann in größere Automatisierungspipelines integriert werden, z. B. zur Stapelverarbeitung von HTML‑Berichten oder zur Vorbereitung von E‑Mail‑Vorlagen. + +**Next steps** +- Erkunden Sie weitere DOM‑Manipulationen (z. B. Einfügen von Elementen, Entfernen von Skripten). +- Kombinieren Sie diesen Ansatz mit einem PDF‑Renderer, um PDFs der gestylten Seiten zu erzeugen. +- Versuchen Sie, eine andere Headless‑Engine wie Selenium WebDriver zu verwenden, wenn Sie volle Browser‑Treue benötigen. + +Viel Spaß beim Coden! + +## Was sollten Sie als Nächstes lernen? + +Die folgenden Tutorials behandeln eng verwandte Themen, die auf den in diesem Leitfaden gezeigten Techniken aufbauen. Jede Ressource enthält vollständige funktionierende Code‑Beispiele mit Schritt‑für‑Schritt‑Erklärungen, um Ihnen zu helfen, zusätzliche API‑Funktionen zu meistern und alternative Implementierungsansätze in Ihren eigenen Projekten zu erkunden. + +- [Erhalten Sie den berechneten Stil in Java – Hintergrundfarbe aus HTML extrahieren](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [Wie man HTML lädt, DPI des Geräts einstellt & Hintergrundfarbe liest](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [HTML aus JavaScript in Java generieren – Vollständige Schritt‑für‑Schritt‑Anleitung](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/java/configuring-environment/_index.md b/html/greek/java/configuring-environment/_index.md index 740567e8f8..eb30929ec0 100644 --- a/html/greek/java/configuring-environment/_index.md +++ b/html/greek/java/configuring-environment/_index.md @@ -122,6 +122,9 @@ weight: 29 ### [Δημιουργία Sandbox Aspose HTML – Πλήρης Οδηγός Java](./create-aspose-html-sandbox-complete-java-guide/) Μάθετε πώς να δημιουργήσετε και να διαχειριστείτε ένα sandbox Aspose HTML σε Java για ασφαλείς μετατροπές HTML σε PDF. +### [Ορισμός προσαρμοσμένου user agent και διαστάσεων οθόνης στο Aspose.HTML για Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Μάθετε πώς να ορίσετε προσαρμοσμένο user agent και διαστάσεις οθόνης για ακριβή απόδοση HTML κατά τη μετατροπή σε PDF ή PNG. + --- **Τελευταία Ενημέρωση:** 2025-12-03 diff --git a/html/greek/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/greek/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..1837d3cda3 --- /dev/null +++ b/html/greek/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,193 @@ +--- +category: general +date: 2026-09-29 +description: Ορίστε προσαρμοσμένο user agent στο Aspose.HTML για Java και μάθετε πώς + να ορίσετε το εικονικό μέγεθος οθόνης για ακριβή απόδοση HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: el +lastmod: 2026-09-29 +og_description: Καθορίστε προσαρμοσμένο user agent στο Aspose.HTML για Java και μάθετε + πώς να ορίσετε το εικονικό μέγεθος οθόνης για ακριβή απόδοση HTML. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Ορισμός προσαρμοσμένου πράκτορα χρήστη και διαστάσεων οθόνης στο Aspose.HTML + για Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Ορισμός προσαρμοσμένου user agent και διαστάσεων οθόνης στο Aspose.HTML για + Java +url: /el/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Ορισμός προσαρμοσμένου user agent και διαστάσεων οθόνης στο Aspose.HTML για Java + +Αν χρειάζεστε να **ορίσετε προσαρμοσμένο user agent** κατά την απόδοση HTML με το Aspose.HTML για Java, αυτός ο οδηγός σας δείχνει ακριβώς πώς να το κάνετε. Με τη ρύθμιση ενός sandbox αποκτάτε επίσης τη δυνατότητα να **ορίσετε εικονικό μέγεθος οθόνης**, εξασφαλίζοντας ότι η διάταξη ταιριάζει με το πραγματικό viewport ενός προγράμματος περιήγησης. + +Θα ολοκληρώσετε αυτό το tutorial με ένα πλήρες, εκτελέσιμο πρόγραμμα που **καθορίζει user agent**, **ορίζει το πλάτος της οθόνης** και **ορίζει το ύψος της οθόνης**. Δεν απαιτούνται εξωτερικά εργαλεία—μόνο το Aspose.HTML για Java και ένα runtime Java 8+. + +## Τι θα μάθετε + +* Πώς να δημιουργήσετε ένα `SandboxConfiguration` για απομόνωση της απόδοσης. +* Πώς να **ορίσετε προσαρμοσμένο user agent** και γιατί είναι σημαντικό για τις ανταποκρινόμενες σελίδες. +* Πώς να **ορίσετε εικονικό μέγεθος οθόνης** (πλάτος και ύψος οθόνης) για ακριβή διάταξη. +* Πώς να φορτώσετε ένα αρχείο HTML στο sandbox και να αποθηκεύσετε το επεξεργασμένο αποτέλεσμα. +* Κοινά προβλήματα και συμβουλές βέλτιστων πρακτικών για απόδοση σε sandbox. + +> **Προαπαιτούμενα** – Χρειάζεστε μια έγκυρη άδεια Aspose.HTML για Java, Java 8 ή νεότερη, και ένα IDE (IntelliJ IDEA, Eclipse ή VS Code). Το παράδειγμα χρησιμοποιεί ένα τοπικό αρχείο `input.html`, αλλά οποιοδήποτε προσβάσιμο URL λειτουργεί. + +![Sandbox flow diagram](sandbox-flow.png "set custom user agent example in Java") + +## Βήμα 1: Δημιουργία ρύθμισης sandbox (το θεμέλιο) + +Το sandbox απομονώνει το περιβάλλον απόδοσης από το κεντρικό JVM, κάτι που είναι απαραίτητο όταν θέλετε να **ορίσετε προσαρμοσμένο user agent** ή να αλλάξετε το μέγεθος του viewport. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Γιατί αυτό το βήμα;* +`SandboxConfiguration` περιέχει όλες τις επιλογές απόδοσης, συμπεριλαμβανομένων των **διαστάσεων οθόνης** και των **συμβολοσειρών user‑agent**. Με τη ρύθμισή του πριν τη φόρτωση του εγγράφου, εξασφαλίζετε ότι η μηχανή HTML θα τηρήσει αυτές τις ρυθμίσεις από το πρώτο αίτημα. + +## Βήμα 2: Ορισμός διαστάσεων οθόνης για προσομοίωση πραγματικής συσκευής + +Οι ανταποκρινόμενες ιστοσελίδες συχνά διαβάζουν `window.innerWidth` και `window.innerHeight`. Για να κάνετε τη μηχανή να πιστεύει ότι εκτελείται σε οθόνη 1024 × 768, **ορίζετε εικονικό μέγεθος οθόνης**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Γιατί είναι σημαντικό* – Εάν παραλείψετε το **set screen dimensions**, ο renderer μπορεί να χρησιμοποιήσει προεπιλεγμένο μικρό viewport, προκαλώντας τα CSS media queries να επιλέξουν τη διάταξη για κινητά. Με την ρητή **set screen width** και **set screen height**, ελέγχετε ποιοι κανόνες CSS ενεργοποιούνται. + +## Βήμα 3: Καθορισμός προσαρμοσμένης συμβολοσειράς user‑agent + +Ορισμένες ιστοσελίδες παρέχουν διαφορετικό περιεχόμενο ανάλογα με την κεφαλίδα user‑agent. Για να **καθορίσετε user agent** απλώς το ορίζετε στη ρύθμιση του sandbox: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Γιατί να χρησιμοποιήσετε προσαρμοσμένο user agent;* +Μια προσαρμοσμένη συμβολοσειρά μπορεί να παρακάμψει τον εντοπισμό bot, να ενεργοποιήσει λειτουργίες μόνο για επιτραπέζιους υπολογιστές ή να δοκιμάσει πώς συμπεριφέρεται ένας ιστότοπος για συγκεκριμένη έκδοση προγράμματος περιήγησης. Η μηχανή Aspose προωθεί αυτήν την τιμή με κάθε αίτημα HTTP που γίνεται κατά τη φόρτωση εξωτερικών πόρων (CSS, εικόνες, scripts). + +## Βήμα 4: Φόρτωση του εγγράφου HTML μέσα στο sandbox + +Τώρα που το sandbox είναι πλήρως ρυθμισμένο, φορτώστε το αρχείο HTML. Ο κατασκευαστής που δέχεται διαδρομή αρχείου και ένα `SandboxConfiguration` εφαρμόζει αυτόματα όλες τις ρυθμίσεις που ορίσαμε. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +Αν χρειάζεται να φορτώσετε από απομακρυσμένο URL, αντικαταστήστε τη διαδρομή αρχείου με τη συμβολοσειρά URL—το Aspose.HTML θα συνεχίσει να σέβεται το **set custom user agent** και τις **screen dimensions**. + +## Βήμα 5: Αποθήκευση του επεξεργασμένου αποτελέσματος + +Αφού το έγγραφο ολοκληρώσει τη φόρτωση, μπορείτε να το αποθηκεύσετε σε οποιαδήποτε υποστηριζόμενη μορφή. Εδώ γράφουμε ένα HTML αρχείο sandboxed που αντικατοπτρίζει τυχόν αλλαγές DOM που προκλήθηκαν από τις προσαρμοσμένες ρυθμίσεις. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +Το αποθηκευμένο αρχείο θα περιέχει το ίδιο markup, αλλά οποιαδήποτε scripts που έλεγχαν το `navigator.userAgent` ή εξέταζαν το `window.innerWidth` θα δουν τώρα τις τιμές που παρείχατε. + +## Πλήρες, εκτελέσιμο παράδειγμα + +Συνδυάζοντας όλα τα βήματα μαζί, έχετε ένα αυτόνομο πρόγραμμα που μπορείτε να αντιγράψετε, να επικολλήσετε και να εκτελέσετε. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Αναμενόμενο αποτέλεσμα + +Η εκτέλεση του προγράμματος δημιουργεί το `sandboxed_output.html`. Αν το ανοίξετε σε έναν περιηγητή και ελέγξετε το `navigator.userAgent` μέσω της κονσόλας, θα δείτε **AsposeHTML/1.0**. Ομοίως, το `window.innerWidth` θα εμφανίσει **1024**, επιβεβαιώνοντας ότι το **set screen dimensions** λειτούργησε όπως αναμενόταν. + +## Συχνές ερωτήσεις & αντιμετώπιση ειδικών περιπτώσεων + +| Ερώτηση | Απάντηση | +|----------|--------| +| **Τι γίνεται αν η σελίδα φορτώνει πρόσθετους πόρους από διαφορετικό domain;** | Το sandbox προωθεί το **custom user agent** με κάθε αίτημα, αλλά οι πολιτικές cross‑origin εξακολουθούν να ισχύουν. Χρησιμοποιήστε `sandboxConfig.setAllowCrossDomain(true)` εάν χρειάζεται να χαλαρώσετε αυτούς τους περιορισμούς. | +| **Μπορώ να αλλάξω το μέγεθος της οθόνης μετά τη φόρτωση του εγγράφου;** | Όχι. Οι διαστάσεις της οθόνης διαβάζονται κατά τη διάρκεια του αρχικού βήματος διάταξης. Για να αποδώσετε με διαφορετικό μέγεθος, δημιουργήστε ένα νέο `SandboxConfiguration` και φορτώστε ξανά το έγγραφο. | +| **Χρειάζεται να καλέσω `document.close()`;** | Το `HTMLDocument` υλοποιεί το `AutoCloseable`. Η χρήση ενός μπλοκ try‑with‑resources εξασφαλίζει σωστό καθαρισμό, αλλά η ρητή κλήση `close()` είναι προαιρετική σε απλά scripts. | +| **Πώς διαφέρει αυτό από τον ορισμό user‑agent σε HTTP client;** | Ο ορισμός του user‑agent στο sandbox επηρεάζει **όλες** τις αιτήσεις πόρων που κάνει η μηχανή HTML, όχι μόνο την αρχική λήψη του HTML. Αυτό προσομοιώνει πιο πιστά έναν πραγματικό περιηγητή. | +| **Είναι το sandbox ασφαλές για μη αξιόπιστο HTML;** | Ναι. Το sandbox απομονώνει την πρόσβαση στο σύστημα αρχείων και περιορίζει τις κλήσεις δικτύου σύμφωνα με τη ρύθμιση, μειώνοντας τον κίνδυνο κακόβουλων scripts να επηρεάσουν το κεντρικό JVM. | + +## Συμβουλές επαγγελματιών + +* **Επαναχρησιμοποίηση ρυθμίσεων** – Εάν αποδίδετε πολλές σελίδες με το ίδιο viewport, δημιουργήστε ένα μόνο `SandboxConfiguration` και επαναχρησιμοποιήστε το για να αποφύγετε το κόστος δημιουργίας αντικειμένων. +* **Ανίχνευση με logging** – Ενεργοποιήστε το logging του Aspose.HTML (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) για να δείτε ποιοι πόροι λήφθηκαν με το προσαρμοσμένο user‑agent. +* **Συνδυασμός με CSS media queries** – Ρυθμίζοντας το **set screen width** μπορείτε να δοκιμάσετε πώς η ανταποκρινόμενη σχεδίασή σας συμπεριφέρεται σε tablets, κινητά ή μεγάλα desktop χωρίς να ανοίξετε πραγματικό περιηγητή. + +## Συμπέρασμα + +Τώρα γνωρίζετε πώς να **ορίσετε προσαρμοσμένο user agent** και **ορίσετε διαστάσεις οθόνης** κατά την απόδοση HTML με το Aspose.HTML για Java. Με τη ρύθμιση ενός sandbox, απομονώνετε το περιβάλλον, ελέγχετε το viewport και διασφαλίζετε ότι οι εξωτερικοί πόροι βλέπουν τις ακριβείς κεφαλίδες που ορίζετε. Αυτή η τεχνική είναι απαραίτητη για τη δοκιμή ανταποκρινόμενων διατάξεων, την παράκαμψη φραγμών bot ή την αναπαραγωγή λειτουργιών μόνο για επιτραπέζιους υπολογιστές σε αυτοματοποιημένες διαδικασίες. + +Στη συνέχεια, μπορείτε να εξερευνήσετε **πώς να ορίσετε προσαρμοσμένα cookies** ή **πώς να καταγράψετε screenshots της απόδοσης** χρησιμοποιώντας το API απόδοσης του Aspose.HTML—και τα δύο concepts βασίζονται στο ίδιο πρότυπο ρύθμισης sandbox που μόλις μάθατε. + +Καλή προγραμματιστική! + +## Τι θα πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετιζόμενα θέματα που βασίζονται στις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κατακτήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [High DPI Rendering in Java – Capture Webpage Screenshots with Custom User Agent](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Create HTML File Java & Set Up Network Service (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/java/creating-managing-html-documents/_index.md b/html/greek/java/creating-managing-html-documents/_index.md index 05b94fc16f..0b423407b2 100644 --- a/html/greek/java/creating-managing-html-documents/_index.md +++ b/html/greek/java/creating-managing-html-documents/_index.md @@ -58,9 +58,11 @@ url: /el/java/creating-managing-html-documents/ Μάθετε πώς να φορτώνετε έγγραφα HTML από ροές χρησιμοποιώντας το Aspose.HTML για Java. Αυτός ο οδηγός παρέχει έναν οδηγό βήμα προς βήμα για απρόσκοπτη επεξεργασία HTML. ### [Δημιουργήστε έγγραφα HTML από το String στο Aspose.HTML για Java](./create-html-documents-from-string/) -Μάθετε πώς να δημιουργείτε έγγραφα HTML από συμβολοσειρές στο Aspose.HTML για Java με αυτόν τον οδηγό βήμα προς βήμα. +Μάθετε πώς να δημιουργείτε έγγραφα HTML από συμβολοσειρές στο Aspose.HTML για Java με αυτόν τον οδηγό βήμα‑βήμα. + ### [Δημιουργία εγγράφου HTML με Java – Λήψη JSON και δημιουργία περιεχομένου](./create-html-document-with-java-fetch-json-and-generate-conte/) Μάθετε πώς να δημιουργήσετε ένα έγγραφο HTML σε Java, λαμβάνοντας δεδομένα JSON και δημιουργώντας δυναμικό περιεχόμενο HTML με οδηγίες βήμα‑βήμα. + ### [Φόρτωση εγγράφων HTML από τη διεύθυνση URL στο Aspose.HTML για Java](./load-html-documents-from-url/) Ανακαλύψτε πώς να φορτώνετε εύκολα έγγραφα HTML από μια διεύθυνση URL σε Java με το Aspose.HTML. Περιλαμβάνεται σεμινάριο βήμα προς βήμα. @@ -79,14 +81,24 @@ url: /el/java/creating-managing-html-documents/ ### [Δημιουργία και διαχείριση εγγράφων SVG στο Aspose.HTML για Java](./create-manage-svg-documents/) Μάθετε να δημιουργείτε και να διαχειρίζεστε έγγραφα SVG χρησιμοποιώντας το Aspose.HTML για Java! Αυτός ο περιεκτικός οδηγός καλύπτει τα πάντα, από τη βασική δημιουργία έως την προηγμένη χειραγώγηση. +### [Πώς να δημιουργήσετε στοιχείο HTML σε Java χρησιμοποιώντας το Aspose.HTML](./how-to-create-html-element-in-java-using-aspose-html/) +Μάθετε πώς να δημιουργήσετε ένα στοιχείο HTML σε Java με το Aspose.HTML, βήμα‑βήμα οδηγίες για αρχάριους και προχωρημένους. + ### [Πώς να ερωτήσετε HTML σε Java – Πλήρης οδηγός](./how-to-query-html-in-java-complete-tutorial/) Μάθετε πώς να εκτελείτε ερωτήματα σε έγγραφα HTML με Java χρησιμοποιώντας το Aspose.HTML, βήμα‑βήμα οδηγίες και παραδείγματα. + +### [Πώς να μετρήσετε στοιχεία HTML σε Java με XPath](./how-to-count-html-elements-in-java-with-xpath/) +Μάθετε πώς να μετράτε στοιχεία HTML σε Java χρησιμοποιώντας XPath με βήμα‑βήμα οδηγίες. + ### [Εξαγωγή κειμένου από HTML σε Java – Πλήρης οδηγός](./extract-text-from-html-in-java-complete-programming-guide/) Μάθετε πώς να εξάγετε κείμενο από έγγραφα HTML σε Java με το Aspose.HTML, βήμα‑βήμα οδηγίες και παραδείγματα. ### [Καταμέτρηση χαρακτήρων HTML σε Java – Πλήρης οδηγός με Aspose HTML](./count-html-characters-in-java-full-guide-with-aspose-html/) Μάθετε πώς να μετράτε τους χαρακτήρες HTML σε εφαρμογές Java χρησιμοποιώντας το Aspose.HTML, βήμα‑βήμα οδηγός. +### [Πώς να επιλέξετε στοιχεία κατά κλάση σε Java χρησιμοποιώντας querySelectorAll](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Μάθετε πώς να επιλέγετε στοιχεία HTML με συγκεκριμένη κλάση σε Java μέσω querySelectorAll, βήμα‑βήμα οδηγός. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} @@ -118,5 +130,4 @@ url: /el/java/creating-managing-html-documents/ {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} - +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/greek/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..af3fc52109 --- /dev/null +++ b/html/greek/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,210 @@ +--- +category: general +date: 2026-09-29 +description: Μάθετε πώς να μετράτε στοιχεία HTML σε Java χρησιμοποιώντας το Aspose.HTML + και το XPath. Αυτός ο οδηγός δείχνει πώς να φορτώσετε ένα έγγραφο HTML, να επιλέξετε + κόμβους με XPath και να λάβετε μια λίστα κόμβων. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: el +lastmod: 2026-09-29 +og_description: Πώς να μετρήσετε στοιχεία HTML σε Java χρησιμοποιώντας το Aspose.HTML. + Ακολουθήστε αυτό το πλήρες σεμινάριο για να φορτώσετε ένα έγγραφο HTML, να επιλέξετε + κόμβους με XPath, να αξιολογήσετε το XPath σε Java και να λάβετε μια λίστα κόμβων. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: Πώς να μετρήσετε τα στοιχεία HTML σε Java – οδηγός βήμα‑προς‑βήμα +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: Πώς να μετρήσετε στοιχεία HTML σε Java με XPath +url: /el/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να μετρήσετε στοιχεία HTML σε Java με XPath + +Αν χρειάζεστε **πώς να μετρήσετε στοιχεία HTML** σε μια ιστοσελίδα από μια εφαρμογή Java, αυτός ο οδηγός σας παρέχει μια πλήρη, έτοιμη προς εκτέλεση λύση. Μέχρι το τέλος των πρώτων δύο προτάσεων θα γνωρίζετε ακριβώς πώς να φορτώσετε ένα έγγραφο HTML, να επιλέξετε κόμβους με XPath και να ανακτήσετε μια λίστα κόμβων που μπορείτε να μετρήσετε. + +Θα χρησιμοποιήσουμε τη βιβλιοθήκη Aspose.HTML for Java επειδή παρέχει ένα API συμβατό με DOM και μια ισχυρή μηχανή XPath. Το tutorial καλύπτει όλα όσα χρειάζεστε—εισαγωγές, κώδικα, εξηγήσεις και αναμενόμενη έξοδο—ώστε να μπορείτε να αντιγράψετε το παράδειγμα στο έργο σας και να δείτε τα αποτελέσματα άμεσα. Καθ' όλη τη διάρκεια θα αγγίξουμε επίσης **select nodes with XPath**, **get node list Java**, **load HTML document Java**, και **evaluate XPath in Java**. + +## Τι θα πετύχετε + +* Φορτώστε ένα αρχείο HTML από το σύστημα αρχείων. +* Δημιουργήστε μια έκφραση XPath που στοχεύει συγκεκριμένα στοιχεία. +* Αξιολογήστε την έκφραση XPath έναντι του εγγράφου. +* Ανακτήστε ένα `NodeList` και μετρήστε πόσα ταιριαστά στοιχεία υπάρχουν. + +Δεν απαιτούνται εξωτερικές υπηρεσίες ή πολύπλοκη διαμόρφωση· χρειάζεται μόνο το Aspose.HTML JAR στο classpath σας. + +--- + +## Πώς να μετρήσετε στοιχεία HTML με XPath σε Java + +Αυτή η ενότητα βήμα‑βήμα δείχνει τον ακριβή κώδικα που χρειάζεστε. Κάθε υποενότητα αντιστοιχεί σε ένα λογικό μέρος της διαδικασίας, καθιστώντας εύκολο το προσαρμογή ή την επέκταση. + +### Βήμα 1: Φορτώστε το έγγραφο HTML σε Java + +Πρώτα, φέρτε το αρχείο HTML στη μνήμη. Η κλάση `HTMLDocument` αναλύει το αρχείο και δημιουργεί ένα δέντρο DOM που μπορεί να ερωτηθεί από το XPath. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Γιατί είναι σημαντικό:** +Η φόρτωση του εγγράφου δημιουργεί μια αναπαράσταση DOM, η οποία απαιτείται για οποιαδήποτε αξιολόγηση XPath. Εάν η διαδρομή του αρχείου είναι λανθασμένη, το Aspose.HTML ρίχνει ένα `FileNotFoundException`, οπότε ελέγξτε ξανά τη θέση του `input.html`. + +### Βήμα 2: Δημιουργήστε και αξιολογήστε μια έκφραση XPath + +Τώρα δημιουργούμε ένα XPath που επιλέγει τα στοιχεία που θέλουμε να μετρήσουμε. Σε αυτό το παράδειγμα μετράμε όλα τα ετικέτες `` των οποίων το χαρακτηριστικό `alt` ισούται με "logo". + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Γιατί είναι σημαντικό:** +Η έκφραση `//img[@alt='logo']` είναι ένας σύντομος τρόπος για **select nodes with XPath**. Η κλήση `evaluate` **evaluate XPath in Java** και επιστρέφει ένα γενικό `XPathResult`. Η μετατροπή σε `NodeList` μας δίνει άμεση πρόσβαση στη συλλογή των ταιριαστών κόμβων. + +### Βήμα 3: Ανακτήστε και μετρήστε τη λίστα κόμβων + +Τέλος, μετράμε πόσοι κόμβοι επιστράφηκαν. Το API `NodeList` παρέχει τη μέθοδο `getLength()` για αυτόν τον σκοπό. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Γιατί είναι σημαντικό:** +Η `getLength()` είναι ο πιο απλός τρόπος για **get node list Java** και να λάβετε έναν αριθμό. Εάν το XPath δεν ταιριάζει με κανένα στοιχείο, το μήκος θα είναι `0`, το οποίο η εφαρμογή σας μπορεί να διαχειριστεί ομαλά. + +### Πλήρες εκτελέσιμο παράδειγμα + +Παρακάτω βρίσκεται το πλήρες πρόγραμμα, συμπεριλαμβανομένων όλων των εισαγωγών και μιας ελάχιστης μεθόδου `main`. Αντιγράψτε το σε ένα αρχείο με όνομα `CountHtmlElements.java`, προσθέστε το Aspose.HTML JAR στο έργο σας και εκτελέστε το. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Αναμενόμενη έξοδος** + +Εάν το `input.html` περιέχει τρία ετικέτες `logo`, το πρόγραμμα εκτυπώνει: + +``` +Found 3 logo images. +``` + +Εάν δεν υπάρχουν τέτοιες εικόνες, εκτυπώνει: + +``` +Found 0 logo images. +``` + +## Συνηθισμένες παραλλαγές και περιπτώσεις άκρων + +| Situation | What to change | Reason | +|-----------|----------------|--------| +| Καταμέτρηση διαφορετικού στοιχείου (π.χ., `
` με κλάση `header`) | Αλλάξτε το XPath σε `//div[@class='header']` | Η σύνταξη XPath σας επιτρέπει να στοχεύσετε οποιαδήποτε ετικέτα/χαρακτηριστικό. | +| Καταμέτρηση όλων των στοιχείων ανεξαρτήτως χαρακτηριστικού | Χρησιμοποιήστε `//*` ως έκφραση XPath | `//*` επιλέγει κάθε κόμβο στοιχείου στο έγγραφο. | +| Μεγάλα έγγραφα που προκαλούν πίεση μνήμης | Χρησιμοποιήστε έναν streaming parser ή αξιολογήστε XPath σε ένα fragment | Το Aspose.HTML προσφέρει `HTMLDocumentFragment` για μερική ανάλυση. | +| Απαιτούνται οι πραγματικοί κόμβοι, όχι μόνο η καταμέτρηση | Επαναλάβετε μέσω `nodes.item(i)` | Μπορείτε να επεξεργαστείτε κάθε κόμβο μετά τη μέτρηση. | + +**Συμβουλή:** Πάντα επικυρώστε τη συμβολοσειρά XPath πριν τη περάσετε στο `createXPathExpression`. Μια μη έγκυρη έκφραση ρίχνει `XPathException`, το οποίο μπορείτε να πιάσετε για να παρέχετε ένα φιλικό μήνυμα σφάλματος. + +## Λίστα ελέγχου αντιμετώπισης προβλημάτων + +1. **Library not found** – Βεβαιωθείτε ότι το Aspose.HTML for Java JAR βρίσκεται στο classpath (`-cp` ή στις εξαρτήσεις του IDE σας). +2. **File not found** – Επαληθεύστε ότι το `input.html` βρίσκεται σχετικά με τον τρέχοντα φάκελο εργασίας ή χρησιμοποιήστε απόλυτη διαδρομή. +3. **Zero results** – Ελέγξτε ξανά τις τιμές των χαρακτηριστικών και την ευαισθησία πεζών-κεφαλαίων (`alt='logo'` vs `alt='Logo'`). Το XPath είναι case‑sensitive. +4. **Performance concerns** – Επαναχρησιμοποιήστε ένα μόνο αντικείμενο `HTMLDocument` εάν χρειάζεται να εκτελέσετε πολλές ερωτήσεις XPath στο ίδιο αρχείο. + +## Συμπέρασμα + +Τώρα γνωρίζετε **how to count HTML elements** σε Java χρησιμοποιώντας το Aspose.HTML και το XPath. Φορτώνοντας το έγγραφο HTML, δημιουργώντας μια έκφραση XPath, **evaluate XPath in Java**, και ανακτώντας μια **node list**, μπορείτε γρήγορα να καθορίσετε τον αριθμό των ταιριαστών στοιχείων. Αυτή η τεχνική λειτουργεί για οποιαδήποτε ετικέτα ή χαρακτηριστικό, καθιστώντας την ένα ευέλικτο εργαλείο για web‑scraping, αυτοματοποιημένες δοκιμές ή ανάλυση περιεχομένου. + +Τα επόμενα βήματα που μπορείτε να εξερευνήσετε περιλαμβάνουν: + +* Χρήση **select nodes with XPath** για εξαγωγή τιμών χαρακτηριστικών (π.χ., `src` εικόνας). +* Συνδυασμός πολλαπλών ερωτημάτων XPath για δημιουργία αναφοράς στατιστικών στοιχείων. +* Ενσωμάτωση αυτής της λογικής σε μια μεγαλύτερη υπηρεσία Java που επεξεργάζεται αρχεία HTML μαζικά. + +Μη διστάσετε να πειραματιστείτε με διαφορετικές εκφράσεις XPath και δομές εγγράφων—η καταμέτρηση στοιχείων HTML είναι μόνο η αρχή! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετιζόμενα θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κατακτήσετε πρόσθετες δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [How to Parse HTML Java – Load, Query & Count Elements](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Load HTML Document Java – Complete Guide with XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/greek/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..61586d1f76 --- /dev/null +++ b/html/greek/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,185 @@ +--- +category: general +date: 2026-09-29 +description: Μάθετε πώς να δημιουργήσετε στοιχείο HTML σε Java, να προσθέσετε μια + παράγραφο, να ορίσετε το κείμενό του και να το προσαρτήσετε στο σώμα με το Aspose.HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: el +lastmod: 2026-09-29 +og_description: Δημιουργήστε στοιχείο HTML σε Java προσθέτοντας μια παράγραφο, ορίζοντας + το κείμενό του και προσθέτοντάς το στο σώμα με το Aspose.HTML. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: Δημιουργία στοιχείου HTML σε Java – βήμα‑βήμα οδηγός Aspose.HTML +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: Πώς να δημιουργήσετε ένα στοιχείο HTML σε Java χρησιμοποιώντας το Aspose.HTML +url: /el/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να δημιουργήσετε στοιχείο HTML σε Java χρησιμοποιώντας Aspose.HTML + +Αν χρειάζεται να **δημιουργήσετε στοιχείο HTML** σε μια εφαρμογή Java, αυτός ο οδηγός σας παρουσιάζει μια πλήρη, εκτελέσιμη λύση. Θα δείτε πώς να **προσθέσετε μια παράγραφο**, να ορίσετε το κείμενό της και **να προσαρτήσετε το στοιχείο στο body** ενός υπάρχοντος αρχείου HTML με το Aspose.HTML. + +Το tutorial καλύπτει όλα, από τη φόρτωση ενός εγγράφου μέχρι την αποθήκευση του τροποποιημένου αρχείου, ώστε να μπορείτε να αντιγράψετε τον κώδικα στο δικό σας έργο χωρίς περαιτέρω έρευνα. + +## Προαπαιτούμενα + +Πριν ξεκινήσετε, βεβαιωθείτε ότι έχετε: + +* Java 17 ή νεότερη εγκατεστημένη. +* Aspose.HTML for Java 23.10 (ή την πιο πρόσφατη έκδοση) προστιθέμενη στο classpath του έργου σας. +* Ένα απλό αρχείο `input.html` σε γνωστό φάκελο. Το αρχείο μπορεί να είναι κενό (``) ή να περιέχει υπάρχουσα σήμανση. + +## Βήμα 1: Φόρτωση του υπάρχοντος εγγράφου HTML + +Η φόρτωση του αρχείου πηγής σας παρέχει ένα διαχειρίσιμο δέντρο DOM. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +Ο κατασκευαστής `HTMLDocument` αναλύει το αρχείο και δημιουργεί ένα ζωντανό DOM. Αν το αρχείο δεν μπορεί να διαβαστεί, το Aspose.HTML ρίχνει ένα `IOException`; μπορείτε είτε να αφήσετε την εξαίρεση να διαδοθεί είτε να τη διαχειριστείτε με μπλοκ try‑catch. + +## Βήμα 2: Δημιουργία νέου στοιχείου `

` και προσθήκη κειμένου στο HTML + +Η δημιουργία ενός νέου στοιχείου είναι παρόμοια με τη χρήση του `document.createElement` σε πρόγραμμα περιήγησης. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +Η μέθοδος `setTextContent` δημιουργεί αυτόματα έναν κόμβο κειμένου και τον συνδέει με το στοιχείο, που είναι ο προτεινόμενος τρόπος για **προσθήκη κειμένου στο HTML**. Αυτή η μέθοδος επίσης διαφύγει χαρακτήρες που θα μπορούσαν να σπάσουν τη σήμανση. + +## Βήμα 3: Προσάρτηση του στοιχείου στο body + +Τώρα που η παράγραφος είναι έτοιμη, πρέπει να την τοποθετήσετε μέσα στο `` του εγγράφου. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +Η `doc.getBody()` επιστρέφει τον κόμβο ``, και η `appendChild` εισάγει το νέο `

` ως το τελευταίο παιδί. Αν το έγγραφο δεν έχει στοιχείο `` (σπάνιο για ένα καλά δομημένο αρχείο HTML), το Aspose.HTML δημιουργεί αυτόματα ένα. + +## Βήμα 4: Αποθήκευση του τροποποιημένου εγγράφου + +Τέλος, γράψτε το ενημερωμένο DOM πίσω στο δίσκο. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +Η `save` σειριοποιεί το DOM, διατηρώντας την υπάρχουσα σήμανση και προσθέτοντας τη νέα παράγραφο. Το αποτέλεσμα `output.html` θα περιέχει: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Πλήρης κώδικας (java html example) + +Η συνένωση όλων των βημάτων δημιουργεί ένα αυτόνομο πρόγραμμα που μπορείτε να εκτελέσετε αμέσως. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### Τι κάνει ο κώδικας + +| Βήμα | Ενέργεια | Γιατί είναι σημαντικό | +|------|----------|-----------------------| +| Φόρτωση εγγράφου | `new HTMLDocument(...)` | Αναλύει το πηγαίο HTML σε DOM που μπορείτε να διαχειριστείτε. | +| Δημιουργία στοιχείου | `doc.createElement("p")` | Αντιγράφει το API του προγράμματος περιήγησης, εξασφαλίζοντας ότι το στοιχείο ακολουθεί τα πρότυπα HTML. | +| Ορισμός κειμένου | `setTextContent(...)` | Εγγυάται σωστή διαφυγή και αποφεύγει τη χειροκίνητη δημιουργία κόμβου κειμένου. | +| Προσάρτηση στο body | `doc.getBody().appendChild(...)` | Τοποθετεί το νέο στοιχείο εκεί που οι browsers θα το αποδώσουν. | +| Αποθήκευση αρχείου | `doc.save(...)` | Διατηρεί τις αλλαγές, παράγοντας ένα έγκυρο αρχείο HTML έτοιμο για περαιτέρω χρήση. | + +## Συνηθισμένες παραλλαγές και ειδικές περιπτώσεις + +* **Προσθήκη πολλαπλών στοιχείων** – επαναλάβετε τα βήματα 2‑3 για κάθε νέο κόμβο πριν καλέσετε `save`. +* **Εισαγωγή πριν από συγκεκριμένο κόμβο** – χρησιμοποιήστε `insertBefore(newNode, referenceNode)` αντί για `appendChild`. +* **Εργασία με τμήματα** – η `doc.createDocumentFragment()` σας επιτρέπει να δημιουργήσετε μια ομάδα κόμβων και να τους συνδέσετε με μία ενέργεια, βελτιώνοντας την απόδοση για μεγάλες ενημερώσεις. +* **Διαχείριση χαρακτήρων UTF‑8** – το Aspose.HTML γράφει αυτόματα σε UTF‑8· απλώς βεβαιωθείτε ότι το αρχείο πηγής είναι κωδικοποιημένο με τον ίδιο τρόπο. + +## Πρακτικές συμβουλές + +* **Διαχείριση διαδρομών** – Χρησιμοποιήστε `java.nio.file.Paths` για να δημιουργήσετε ανεξάρτητες από την πλατφόρμα διαδρομές αρχείων. +* **Ασφάλεια εξαιρέσεων** – Τυλίξτε ολόκληρο το τμήμα σε δήλωση try‑with‑resources αν χρειάζεται να κλείσετε επιπλέον ροές. +* **Απόδοση** – Για πολύ μεγάλα αρχεία HTML, σκεφτείτε να φορτώσετε το έγγραφο με `HTMLDocument(String, LoadOptions)` όπου μπορείτε να απενεργοποιήσετε εξωτερικούς πόρους για ταχύτερη ανάλυση. + +## Επαλήθευση του αποτελέσματος + +Αφού τρέξετε το πρόγραμμα, ανοίξτε το `output.html` σε οποιοδήποτε πρόγραμμα περιήγησης. Θα πρέπει να δείτε την παράγραφο “Added by Aspose.HTML” να εμφανίζεται στο τέλος του αρχικού σώματος. Εξετάστε την πηγή της σελίδας για να επιβεβαιώσετε ότι το στοιχείο `

` υπάρχει μέσα στο ``. + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **δημιουργήσετε στοιχείο HTML** σε Java, **να προσθέσετε μια παράγραφο**, **να προσθέσετε κείμενο στο HTML**, και **να προσαρτήσετε το στοιχείο στο body** χρησιμοποιώντας το Aspose.HTML. Το πλήρες **java html example** δείχνει μια καθαρή, έτοιμη για παραγωγή ροή εργασίας που μπορείτε να επεκτείνετε για να διαχειριστείτε οποιοδήποτε τμήμα ενός εγγράφου HTML. + +Στη συνέχεια, εξερευνήστε σχετικά θέματα όπως **τροποποίηση χαρακτηριστικών**, **αφαίρεση κόμβων**, ή **εργασία με στυλ CSS** για να δημιουργήσετε πιο πλούσιες αλυσίδες επεξεργασίας HTML. Καλό κώδικα! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικά παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε επιπλέον δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Create new html element with Java – Full Aspose.HTML Guide](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [append child to body in Java – Full Aspose.HTML Tutorial](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Append Element to Body with Aspose.HTML for Java using a DOM Mutation Observer](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/greek/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..b9202ac09c --- /dev/null +++ b/html/greek/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-09-29 +description: Μάθετε πώς να επιλέγετε στοιχεία κατά κλάση, να διαβάζετε HTML από αρχείο + και να εντοπίζετε εξωτερικούς συνδέσμους σε Java. Αυτός ο οδηγός βήμα‑βήμα καλύπτει + την αποδοτική επανάληψη μιας λίστας κόμβων (NodeList). +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: el +lastmod: 2026-09-29 +og_description: Επιλέξτε στοιχεία κατά κλάση στην Java, διαβάστε HTML από αρχείο και + βρείτε εξωτερικούς συνδέσμους χρησιμοποιώντας querySelectorAll. Ακολουθήστε το πλήρες + παράδειγμα για να επαναλάβετε ένα NodeList. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Επιλογή στοιχείων κατά κλάση στη Java – πλήρης οδηγός με querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: Πώς να επιλέξετε στοιχεία κατά κλάση στη Java χρησιμοποιώντας το querySelectorAll +url: /el/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να επιλέξετε στοιχεία κατά κλάση σε Java χρησιμοποιώντας querySelectorAll + +Αν χρειάζεστε **select elements by class** ενώ επεξεργάζεστε ένα αρχείο HTML σε Java, αυτός ο οδηγός σας δείχνει ακριβώς πώς να το κάνετε. Θα μάθετε να διαβάζετε HTML από αρχείο, να χρησιμοποιείτε `querySelectorAll` για να βρείτε εξωτερικούς συνδέσμους και να επαναλαμβάνετε με ασφάλεια το προκύπτον `NodeList`. + +Η εργασία με HTML σε Java συχνά φαίνεται βαριά, αλλά οι σύγχρονες βιβλιοθήκες σας παρέχουν ένα σύντομο, API βασισμένο σε CSS‑selector. Το παρακάτω παράδειγμα χρησιμοποιεί **jsoup** (έκδοση 1.17.2) επειδή υλοποιεί επιλογείς σε στυλ `querySelectorAll` και επιστρέφει μια συλλογή `Elements` που συμπεριφέρεται όπως ένα `NodeList`. Μπορείτε να προσαρμόσετε την ίδια λογική σε άλλες υλοποιήσεις DOM αν χρειαστεί. + +## Προαπαιτούμενα + +* JDK 17 ή νεότερο εγκατεστημένο. +* Maven ή Gradle για διαχείριση εξαρτήσεων. +* Βασική εξοικείωση με Java streams και το μοντέλο DOM. + +Προσθέστε το jsoup στο έργο σας: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## Βήμα 1: Διαβάστε HTML από αρχείο + +Η πρώτη εργασία είναι να φορτώσετε το έγγραφο HTML από το δίσκο. Η μέθοδος `Jsoup.parse(Path, Charset)` διαβάζει το αρχείο και δημιουργεί ένα δέντρο DOM που μπορείτε να ερωτήσετε. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Γιατί είναι σημαντικό*: Η φόρτωση του αρχείου μία φορά αποφεύγει επαναλαμβανόμενες εισόδους/εξόδους ενώ επαναλαμβάνετε τα στοιχεία αργότερα. Το αντικείμενο `Document` διατηρεί ολόκληρο το DOM, επιτρέποντας γρήγορα ερωτήματα επιλογέα. + +## Βήμα 2: Χρησιμοποιήστε `querySelectorAll` για να επιλέξετε στοιχεία κατά κλάση + +Τώρα που το έγγραφο βρίσκεται στη μνήμη, μπορείτε να **select elements by class** χρησιμοποιώντας έναν CSS selector. Ο selector `"a.external"` ταιριάζει με ετικέτες `` που έχουν την κλάση `external`—ακριβώς ό,τι χρειάζεστε για **find external links**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Γιατί είναι σημαντικό*: Η χρήση ενός selector κλάσης είναι τόσο εκφραστική όσο και αποδοτική. Η βιβλιοθήκη μετατρέπει τον selector σε βελτιστοποιημένη διάσχιση, ώστε να μην χρειάζεται να γράψετε χειροκίνητους βρόχους πάνω σε κάθε κόμβο. + +## Βήμα 3: Επανάληψη του NodeList (Elements) σε Java + +`Elements` υλοποιεί `Iterable`, πράγμα που σημαίνει ότι μπορείτε να χρησιμοποιήσετε έναν τυπικό βρόχο `for‑e​ach` για να **iterate NodeList Java** αντικείμενα. Ο παρακάτω βρόχος εκτυπώνει το χαρακτηριστικό `href` κάθε συνδέσμου. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Γιατί είναι σημαντικό*: Η άμεση επανάληψη διατηρεί τον κώδικα αναγνώσιμο και αποφεύγει το κόστος μετατροπής της συλλογής σε stream όταν χρειάζεστε μόνο απλή έξοδο. + +## Πλήρες λειτουργικό παράδειγμα + +Συνδυάζοντας τα τρία βήματα δημιουργείται ένα αυτόνομο πρόγραμμα που μπορείτε να εκτελέσετε από τη γραμμή εντολών. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Αναμενόμενη έξοδος + +Υποθέτοντας ότι το `input.html` περιέχει: + +```html +Example +About +OpenAI +``` + +Η εκτέλεση του προγράμματος εκτυπώνει: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Επαγγελματικές συμβουλές και κοινά προβλήματα + +* **Encoding matters** – Πάντα διαβάζετε το αρχείο με UTF‑8 (ή το charset που ταιριάζει με την πηγή σας). Λανθασμένο κωδικοποίηση μπορεί να καταστρέψει χαρακτήρες στις τιμές των χαρακτηριστικών. +* **Multiple classes** – Αν ένα στοιχείο έχει πολλές κλάσεις (π.χ., `class="btn external"`), ο selector `"a.external"` εξακολουθεί να ταιριάζει επειδή οι CSS class selectors ελέγχουν την παρουσία του token, όχι την ακριβή συμβολοσειρά. +* **Performance tip** – Αν χρειάζεστε μόνο το χαρακτηριστικό `href`, μπορείτε να το ζητήσετε απευθείας με `doc.select("a.external[href]").eachAttr("href")`. Αυτό αποφεύγει τη δημιουργία πλήρων αντικειμένων `Element` για κάθε αντιστοίχηση. +* **Null safety** – Η `link.attr("href")` επιστρέφει κενή συμβολοσειρά αν λείπει το χαρακτηριστικό, έτσι δεν χρειάζεται έλεγχος null πριν την εκτύπωση. + +## Συχνές ερωτήσεις + +**Q: Does this work with HTML fragments that lack a `` root?** +A: Ναι. Η `Jsoup.parse` αντιμετωπίζει την είσοδο ως απόσπασμα και προσθέτει αυτόματα τα ελλιπή στοιχεία ρίζας, επιτρέποντας στους selectors να λειτουργούν στο σώμα του αποσπάσματος. + +**Q: Can I use `querySelectorAll` without jsoup?** +A: Το τυπικό Java DOM API (`org.w3c.dom`) δεν περιλαμβάνει `querySelectorAll`. Βιβλιοθήκες όπως **HTMLUnit** ή **jodd-lagarto** παρέχουν παρόμοιες μεθόδους. Το μοτίβο που δείχνεται εδώ—φόρτωση, επιλογή με CSS, επανάληψη—παραμένει το ίδιο. + +**Q: What if I need to modify the links instead of just printing them?** +A: Αφού αποκτήσετε κάθε `Element`, μπορείτε να καλέσετε `link.attr("href", "newUrl")` και στη συνέχεια να γράψετε το έγγραφο πίσω στο δίσκο με `Files.writeString`. + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **select elements by class**, **read HTML from file**, **find external links**, και **iterate a NodeList in Java** χρησιμοποιώντας selectors σε στυλ `querySelectorAll`. Το πλήρες παράδειγμα δείχνει μια καθαρή, έτοιμη για παραγωγή ροή εργασίας που μπορείτε να ενσωματώσετε σε μεγαλύτερα pipelines εξόρυξης ή μετασχηματισμού. + +Στη συνέχεια, εξερευνήστε συναφή θέματα όπως **parsing dynamic content with HTMLUnit**, **writing modified HTML back to disk**, ή **using Java streams to collect link URLs into a list**. Κάθε ένα από αυτά βασίζεται στην κεντρική τεχνική επιλογής με βάση την κλάση που παρουσιάστηκε εδώ. Καλή προγραμματιστική! + +## Τι θα πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά σχετικές θεματικές που βασίζονται στις τεχνικές που παρουσιάζονται σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικά παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κυριαρχήσετε πρόσθετες δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Iterate NodeList Java – Read HTML & Get Image src](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [Load HTML Documents from File in Aspose.HTML for Java](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/java/css-html-form-editing/_index.md b/html/greek/java/css-html-form-editing/_index.md index 93bb805614..af5c4de945 100644 --- a/html/greek/java/css-html-form-editing/_index.md +++ b/html/greek/java/css-html-form-editing/_index.md @@ -37,6 +37,8 @@ url: /el/java/css-html-form-editing/ Μάθετε πώς να επιλέγετε στοιχεία HTML με συγκεκριμένη κλάση χρησιμοποιώντας Aspose.HTML για Java σε αυτόν τον ολοκληρωμένο οδηγό. ### [Πώς να διαβάσετε CSS σε Java – Πλήρης Οδηγός με Aspose.HTML](./how-to-read-css-in-java-complete-guide-with-aspose-html/) Μάθετε πώς να διαβάζετε και να επεξεργάζεστε αρχεία CSS σε Java χρησιμοποιώντας το Aspose.HTML σε αυτόν τον πλήρη οδηγό. +### [Πώς να διαβάσετε CSS από HTML με Aspose.HTML σε Java](./how-to-read-css-from-html-with-aspose-html-in-java/) +Μάθετε πώς να διαβάζετε και να επεξεργάζεστε αρχεία CSS από HTML χρησιμοποιώντας Aspose.HTML για Java. ### [Ανάλυση HTML με Java: Εξαγωγή ιδιότητας CSS και λήψη μεγέθους γραμματοσειράς](./parse-html-with-java-extract-css-property-and-get-font-size/) Μάθετε πώς να αναλύετε HTML με Java, να εξάγετε ιδιότητες CSS και να εντοπίζετε το μέγεθος γραμματοσειράς. ### [Πώς να ερωτήσετε HTML σε Java – φόρτωση HTML, CSS selector και εξαγωγή επικεφαλίδων](./how-to-query-html-in-java-load-html-css-selector-and-extract/) diff --git a/html/greek/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/greek/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..174ee305cc --- /dev/null +++ b/html/greek/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,265 @@ +--- +category: general +date: 2026-09-29 +description: Πώς να διαβάσετε CSS από HTML χρησιμοποιώντας το Aspose.HTML για Java. + Μάθετε πώς να επιλέγετε στοιχείο με βάση το ID, να λαμβάνετε το υπολογισμένο στυλ, + να εξάγετε ιδιότητες CSS και να εμφανίζετε το χρώμα φόντου. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: el +lastmod: 2026-09-29 +og_description: Πώς να διαβάσετε CSS από HTML χρησιμοποιώντας το Aspose.HTML για Java. + Βήμα‑βήμα οδηγίες για την επιλογή στοιχείου με ID, την λήψη του υπολογιζόμενου στυλ, + την εξαγωγή του CSS και την εμφάνιση του χρώματος φόντου. +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: Πώς να διαβάσετε CSS από HTML με το Aspose.HTML – Οδηγός Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: Πώς να διαβάσετε CSS από HTML με το Aspose.HTML σε Java +url: /el/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να διαβάσετε CSS από HTML με Aspose.HTML σε Java + +Αν χρειάζεστε **πώς να διαβάσετε css** από ένα αρχείο HTML σε μια εφαρμογή Java, αυτός ο οδηγός σας δείχνει ακριβώς πώς. Μέχρι το τέλος των πρώτων δύο προτάσεων θα γνωρίζετε πώς να επιλέξετε στοιχείο με id, να λάβετε το υπολογισμένο στυλ και να εμφανίσετε το χρώμα φόντου—όλα με το Aspose.HTML. + +Θα περάσουμε από τη φόρτωση ενός εγγράφου HTML, τον εντοπισμό ενός συγκεκριμένου στοιχείου, την εξαγωγή του υπολογισμένου CSS του και την εκτύπωση της τιμής background‑color. Δεν απαιτούνται εξωτερικά εργαλεία εκτός από τη βιβλιοθήκη Aspose.HTML for Java, και ο κώδικας λειτουργεί με Java 8+. + +## Τι θα μάθετε + +* Πώς να διαβάσετε CSS από ένα έγγραφο HTML χρησιμοποιώντας το Aspose.HTML. +* Πώς να **επιλέξετε στοιχείο με id** με `querySelector`. +* Πώς να **λάβετε το υπολογισμένο στυλ** για οποιονδήποτε κόμβο DOM. +* Πώς να **εξάγετε CSS από HTML** και να διαβάσετε μεμονωμένες ιδιότητες όπως **εμφάνιση χρώματος φόντου**. +* Συνηθισμένα προβλήματα και συμβουλές βέλτιστων πρακτικών για αξιόπιστη εξαγωγή CSS. + +### Προαπαιτούμενα + +* Java 8 ή νεότερη εγκατεστημένη. +* Maven ή Gradle για τη διαχείριση της εξάρτησης Aspose.HTML. +* Ένα απλό αρχείο HTML (π.χ., `input.html`) που περιέχει ένα στοιχείο με χαρακτηριστικό `id` που θέλετε να εξετάσετε. + +--- + +## Βήμα 1: Φόρτωση του εγγράφου HTML (πώς να διαβάσετε css) + +Η πρώτη ενέργεια σε οποιαδήποτε ροή εργασίας ανάγνωσης CSS είναι η φόρτωση του πηγαίου HTML. Το Aspose.HTML παρέχει την κλάση `HTMLDocument` που αναλύει το αρχείο και δημιουργεί ένα DOM που μπορείτε να ερωτήσετε. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Γιατί είναι σημαντικό:** Η φόρτωση του εγγράφου δημιουργεί ένα πλήρες DOM, επιτρέποντας αξιόπιστο υπολογισμό στυλ που αντανακλά αυτό που θα παρήγαγε ένας φυλλομετρητής. Η παράλειψη αυτού του βήματος θα σας άφηνε με ακατέργαστο κείμενο αντί για δομημένο έγγραφο. + +--- + +## Βήμα 2: Επιλογή στοιχείου με id + +Για να εξάγετε CSS για έναν συγκεκριμένο κόμβο, χρειάζεστε πρώτα μια αναφορά σε αυτόν τον κόμβο. Η μέθοδος `querySelector` δέχεται οποιονδήποτε CSS selector, καθιστώντας την ιδανική για επιλογή με ID. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Γιατί να χρησιμοποιήσετε `querySelector`;:** Ακολουθεί την ίδια σύνταξη selector που χρησιμοποιείτε στο CSS, ώστε να μπορείτε να επαναχρησιμοποιήσετε γνωστά μοτίβα όπως `#myDiv`, `.className`, ή selectors χαρακτηριστικών χωρίς επιπλέον λογική ανάλυσης. + +## Βήμα 3: Λήψη υπολογισμένου στυλ του στοιχείου + +Μόλις έχετε το στοιχείο, το Aspose.HTML μπορεί να υπολογίσει το **υπολογισμένο στυλ**—τις τελικές τιμές μετά από όλους τους κανόνες CSS, την κληρονομικότητα και τις προεπιλογές. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Γιατί να υπολογίσετε το στυλ;:** Το υπολογισμένο στυλ αντικατοπτρίζει τις πραγματικές τιμές που θα αποδιδόταν από τον φυλλομετρητή, όχι μόνο τις ακατέργαστες δηλώσεις. Αυτό είναι ουσιώδες όταν χρειάζεται να γνωρίζετε το αποτελεσματικό `background-color`, `font-size` ή οποιαδήποτε άλλη ιδιότητα. + +## Βήμα 4: Εξαγωγή ιδιότητας CSS και εμφάνιση χρώματος φόντου + +Τώρα που έχετε το `StyleDeclaration`, μπορείτε να διαβάσετε οποιαδήποτε ιδιότητα CSS. Σε αυτό το παράδειγμα εστιάζουμε στο **εμφάνιση χρώματος φόντου**, αλλά η ίδια προσέγγιση λειτουργεί για `font-size`, `margin` κ.λπ. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**Αναμενόμενη έξοδος** + +``` +Background color: rgb(255, 0, 0) +``` + +Αν το στοιχείο κληρονομεί το φόντο του από έναν γονέα ή ένα φύλλο στυλ, η υπολογισμένη τιμή θα περιλαμβάνει ήδη αυτήν την κληρονομικότητα. + +## Διαχείριση περιπτώσεων άκρων και παραλλαγών + +### Στοιχείο δεν βρέθηκε +Αν το `querySelector` επιστρέψει `null`, ο παραπάνω κώδικας ήδη εκτυπώνει σφάλμα και τερματίζει. Σε παραγωγικό περιβάλλον ίσως θέλετε να ρίξετε μια προσαρμοσμένη εξαίρεση ή να επιστρέψετε σε προεπιλεγμένο στοιχείο. + +### Πολλά στοιχεία με το ίδιο ID (μη έγκυρο HTML) +Παρόλο που τα IDs πρέπει να είναι μοναδικά, εσφαλμένο HTML μπορεί να περιέχει διπλότυπα. Το `querySelector` επιστρέφει το πρώτο ταίριασμα. Για επεξεργασία όλων των ταιριασμάτων, χρησιμοποιήστε `querySelectorAll` και επαναλάβετε τη λούπα πάνω στο `NodeList` που προκύπτει. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Διαφορετικές ιδιότητες CSS +Για να **εξάγετε css από html** πέρα από το χρώμα φόντου, απλώς καλέστε τον κατάλληλο getter στο `StyleDeclaration`. Συνηθισμένοι getters περιλαμβάνουν: + +* `computedStyle.getFontSize()` – Λήψη του μεγέθους γραμματοσειράς +* `computedStyle.getMarginTop()` – Λήψη του άνω περιθωρίου +* `computedStyle.getDisplay()` – Λήψη της ιδιότητας εμφάνισης + +Αν μια ιδιότητα δεν έχει οριστεί ρητά, ο getter επιστρέφει την υπολογισμένη προεπιλογή (π.χ., `display: block` για ένα `
`). + +### Προσθήκες προτιμήσεων προγράμματος περιήγησης +Το Aspose.HTML κανονικοποιεί τις ιδιότητες με προθέματα κατασκευαστών (π.χ., `-webkit-transform`) στα τυπικά ισοδύναμά τους όταν είναι δυνατόν. Αν χρειάζεστε την ακατέργαστη τιμή, μπορείτε να ερωτήσετε απευθείας το χάρτη του `StyleDeclaration`: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +## Πλήρες εκτελέσιμο παράδειγμα + +Παρακάτω βρίσκεται μια αυτόνομη κλάση Java που ενώνει όλα τα βήματα. Αντικαταστήστε το `YOUR_DIRECTORY/input.html` με τη διαδρομή προς το αρχείο HTML σας. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**Εκτέλεση του προγράμματος** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +Θα πρέπει να δείτε το χρώμα φόντου να εκτυπώνεται στην κονσόλα, επιβεβαιώνοντας ότι έχετε επιτυχώς **πώς να διαβάσετε css**, **επιλέξει στοιχείο με id**, **λάβει υπολογισμένο στυλ**, και **εμφανίσει χρώμα φόντου**. + +## Συμβουλές βέλτιστων πρακτικών (pro tips) + +* **Αποθηκεύστε στην κρυφή μνήμη το `HTMLDocument`** εάν χρειάζεται να διαβάσετε CSS από πολλά στοιχεία· η επαναλαμβανόμενη ανάλυση του αρχείου μειώνει την απόδοση. +* **Επικυρώστε το HTML** πριν τη φόρτωση—κακοσχηματισμένο markup μπορεί να οδηγήσει σε ελλιπή κόμβους ή λανθασμένες υπολογισμένες τιμές. +* **Χρησιμοποιήστε try‑with‑resources** (ή ρητό `dispose`) για να ελευθερώσετε τους εγγενείς πόρους που κρατούν τα αντικείμενα Aspose.HTML. +* **Καταγράψτε το πλήρες `StyleDeclaration`** όταν εντοπίζετε σφάλματα σύνθετων στυλ: `System.out.println(computedStyle.getCssText());` σας παρέχει μια στιγμιότυπο κάθε υπολογισμένης ιδιότητας. + +## Συμπέρασμα + +Τώρα γνωρίζετε **πώς να διαβάσετε CSS** από ένα αρχείο HTML σε Java χρησιμοποιώντας το Aspose.HTML. Φορτώνοντας το έγγραφο, **επιλέγοντας στοιχείο με id**, **λαμβάνοντας υπολογισμένο στυλ**, και **εξάγοντας την ιδιότητα background‑color**, μπορείτε προγραμματιστικά να ελέγξετε οποιαδήποτε πληροφορία στυλ που θα εφάρμοζε ένας φυλλομετρητής. + +Από εδώ μπορείτε να επεκτείνετε τη λύση για εξαγωγή άλλων ιδιοτήτων CSS, διαχείριση πολλαπλών στοιχείων, ή ενσωμάτωση των δεδομένων σε πλαίσιο UI‑testing. + +Καλή προγραμματιστική δουλειά, και μη διστάσετε να πειραματιστείτε με διαφορετικούς selectors και ιδιότητες στυλ ώστε να ταιριάζουν στις ανάγκες του έργου σας! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Τα παρακάτω tutorials καλύπτουν στενά συναφή θέματα που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικό κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσει να κυριαρχήσετε πρόσθετες δυνατότητες του API και να εξερευνήσετε εναλλακτικές προσεγγίσεις στην υλοποίηση των δικών σας έργων. + +- [Πώς να λάβετε CSS σε Java – Ανάκτηση υπολογισμένου στυλ με Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [πώς να διαβάσετε css σε Java – Πλήρης οδηγός με Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Λήψη υπολογισμένου στυλ Java – Εξαγωγή χρώματος φόντου από HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/greek/java/editing-html-documents/_index.md b/html/greek/java/editing-html-documents/_index.md index 182e804416..b7d1dd8549 100644 --- a/html/greek/java/editing-html-documents/_index.md +++ b/html/greek/java/editing-html-documents/_index.md @@ -65,7 +65,9 @@ url: /el/java/editing-html-documents/ ### [Αλλαγή κειμένου h1 σε MHTML με Java – Πλήρης Οδηγός Βήμα‑Βήμα](./change-h1-text-in-mhtml-with-java-full-step-by-step-guide/) Μάθετε πώς να αλλάξετε το κείμενο h1 σε αρχεία MHTML χρησιμοποιώντας το Aspose.HTML για Java με αυτόν τον πλήρη οδηγό βήμα‑βήμα. ### [Δημιουργία νέου στοιχείου HTML με Java – Πλήρης οδηγός Aspose.HTML](./create-new-html-element-with-java-full-aspose-html-guide/) -Μάθετε πώς να δημιουργήσετε ένα νέο στοιχείο HTML χρησιμοποιώντας το Aspose.HTML για Java σε έναν πλήρη βήμα-βήμα οδηγό. +Μάθετε πώς να δημιουργήσετε ένα νέο στοιχείο HTML χρησιμοποιώντας Aspose.HTML για Java σε έναν πλήρη βήμα-βήμα οδηγό. +### [Πώς να αλλάξετε το χρώμα φόντου JavaScript χρησιμοποιώντας Java](./how-to-change-background-color-javascript-using-java/) +Μάθετε πώς να αλλάξετε το χρώμα φόντου σε JavaScript χρησιμοποιώντας Aspose.HTML για Java. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/greek/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/greek/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..2f56cff164 --- /dev/null +++ b/html/greek/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,246 @@ +--- +category: general +date: 2026-09-29 +description: Αλλάξτε το χρώμα φόντου με JavaScript σε αρχείο HTML χρησιμοποιώντας + Java. Μάθετε πώς να φορτώνετε HTML σε Java, να εκτελείτε JavaScript σε HTML και + να τροποποιείτε το HTML με Java για νέο φόντο σελίδας. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: el +lastmod: 2026-09-29 +og_description: Αλλάξτε το χρώμα φόντου με JavaScript σε μια σελίδα HTML χρησιμοποιώντας + Java. Αυτό το σεμινάριο σας δείχνει πώς να φορτώσετε HTML σε Java, να εκτελέσετε + JS σε HTML και να ορίσετε το φόντο της σελίδας προγραμματιστικά. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: Αλλαγή χρώματος φόντου JavaScript με Java – οδηγός βήμα‑προς‑βήμα +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: Πώς να αλλάξετε το χρώμα του φόντου σε JavaScript χρησιμοποιώντας Java +url: /el/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Πώς να αλλάξετε το χρώμα φόντου javascript χρησιμοποιώντας Java + +Αν χρειάζεστε **change background color javascript** σε ένα υπάρχον αρχείο HTML, μπορείτε να το κάνετε εξ ολοκλήρου από τη Java χωρίς να ανοίξετε έναν περιηγητή. Αυτό το tutorial σας δείχνει πώς να **load html in java**, να εκτελέσετε ένα μικρό απόσπασμα JavaScript, και στη συνέχεια να **modify html with java** ώστε το φόντο της σελίδας να ενημερωθεί. + +Η λύση λειτουργεί με τη βιβλιοθήκη ανοιχτού κώδικα **HTMLUnit**, η οποία παρέχει έναν headless browser που μπορεί να αξιολογήσει JavaScript ακριβώς όπως θα έκανε ένας πραγματικός περιηγητής. Στο τέλος αυτού του οδηγού θα έχετε μια επαναχρησιμοποιήσιμη μέθοδο που **sets page background** σε οποιοδήποτε χρώμα επιλέγετε. + +## Προαπαιτούμενα + +| Τι χρειάζεστε | Γιατί είναι σημαντικό | +|---------------|-----------------------| +| Java 8 ή νεότερη | Η HTMLUnit απαιτεί τουλάχιστον Java 8. | +| Maven ή Gradle εργαλείο κατασκευής | Για την αυτόματη λήψη της εξάρτησης HTMLUnit. | +| Ένα αρχείο HTML που θέλετε να επεξεργαστείτε (π.χ., `input.html`) | Το πηγαίο έγγραφο που θα φορτωθεί και θα τροποποιηθεί. | + +Προσθέστε την HTMLUnit στο έργο σας: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Συμβουλή επαγγελματία:** Χρησιμοποιήστε την πιο πρόσφατη σταθερή έκδοση της HTMLUnit για να έχετε τη πιο ακριβή μηχανή JavaScript. + +## Change background color javascript – load HTML in Java + +Το πρώτο βήμα είναι να φορτώσετε το έγγραφο HTML σε ένα αντικείμενο `HTMLPage`. Αυτό σας δίνει ένα API τύπου DOM και ένα περιβάλλον εκτέλεσης JavaScript. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Γιατί αυτό είναι σημαντικό*: Το `WebClient` δημιουργεί ένα απομονωμένο περιβάλλον όπου μπορεί να τρέξει JavaScript, ώστε να **run js in html** ακριβώς όπως θα έκανε ο περιηγητής του χρήστη. + +## Εκτελέστε js σε html για να ορίσετε το φόντο της σελίδας + +Μόλις φορτωθεί η σελίδα, μπορείτε να αξιολογήσετε οποιαδήποτε έκφραση JavaScript. Το παρακάτω απόσπασμα αλλάζει το στυλ `backgroundColor` του στοιχείου ``. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Επεξήγηση*: +- `document.body.style.backgroundColor` είναι η τυπική ιδιότητα DOM για το φόντο της σελίδας. +- Καλώντας `eval`, **run js in html** χωρίς την ανάγκη πραγματικού παραθύρου περιηγητή. +- Η μέθοδος είναι επαναχρησιμοποιήσιμη για οποιοδήποτε χρώμα, καλύπτοντας την απαίτηση **set page background**. + +## Τροποποιήστε html με java και αποθηκεύστε το αποτέλεσμα + +Αφού τρέξει το script, το DOM αντικατοπτρίζει το νέο στυλ. Τώρα μπορείτε να γράψετε το ενημερωμένο HTML πίσω στο δίσκο. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +Συνδυάζοντας όλα μαζί, παίρνετε ένα ενιαίο, εκτελέσιμο πρόγραμμα: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### Αναμενόμενη έξοδος + +Η εκτέλεση του προγράμματος εκτυπώνει: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +Ανοίγοντας το `js_modified.html` σε οποιονδήποτε περιηγητή εμφανίζεται η σελίδα με ένα ανοιχτό μπλε φόντο, επιβεβαιώνοντας ότι η λειτουργία **change background color javascript** ολοκληρώθηκε με επιτυχία. + +## Συνηθισμένες παραλλαγές και ειδικές περιπτώσεις + +| Κατάσταση | Πώς να το αντιμετωπίσετε | +|-----------|--------------------------| +| **Διαφορετικές μορφές χρώματος** | Περνάτε οποιαδήποτε τιμή συμβατή με CSS (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **Απουσία ετικέτας ``** | Το script θα αποτύχει σιωπηλά· μπορείτε πρώτα να διασφαλίσετε ότι υπάρχει `` με `page.getFirstByXPath("//body")`. | +| **Μεγάλα αρχεία HTML** | Απενεργοποιήστε το CSS (`setCssEnabled(false)`) και ενεργοποιήστε μόνο τις δυνατότητες JavaScript που χρειάζεστε για να μειώσετε τη χρήση μνήμης. | +| **Εκτέλεση πολλαπλών script** | Καλέστε το `changeBackground` επανειλημμένα ή δημιουργήστε μια βοηθητική μέθοδο που δέχεται λίστα εντολών JavaScript. | + +## Συμπέρασμα + +Τώρα ξέρετε πώς να **change background color javascript** φορτώνοντας ένα αρχείο HTML στη Java, **run js in html**, και **modify html with java** για να **set page background** σε οποιοδήποτε χρώμα επιλέγετε. Το πλήρες παράδειγμα παραπάνω λειτουργεί με τη νεότερη βιβλιοθήκη HTMLUnit και μπορεί να ενσωματωθεί σε μεγαλύτερες αλυσίδες αυτοματοποίησης, όπως η μαζική επεξεργασία HTML αναφορών ή η προετοιμασία προτύπων email. + +**Επόμενα βήματα** +- Εξερευνήστε άλλες επεμβάσεις DOM (π.χ., εισαγωγή στοιχείων, αφαίρεση script). +- Συνδυάστε αυτήν την προσέγγιση με έναν renderer PDF για να δημιουργήσετε PDF των μορφοποιημένων σελίδων. +- Δοκιμάστε τη χρήση διαφορετικής headless μηχανής όπως Selenium WebDriver αν χρειάζεστε πλήρη πιστότητα περιηγητή. + +Καλή προγραμματιστική! + +## Τι πρέπει να μάθετε στη συνέχεια; + +Οι παρακάτω οδηγίες καλύπτουν στενά σχετικές θεματικές που επεκτείνουν τις τεχνικές που παρουσιάστηκαν σε αυτόν τον οδηγό. Κάθε πόρος περιλαμβάνει πλήρη λειτουργικά παραδείγματα κώδικα με βήμα‑βήμα εξηγήσεις για να σας βοηθήσουν να κατακτήσετε πρόσθετες δυνατότητες API και να εξερευνήσετε εναλλακτικές προσεγγίσεις υλοποίησης στα δικά σας έργα. + +- [Αποκτήστε Υπολογιζόμενο Στυλ Java – Εξαγωγή Χρώματος Φόντου από HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [Πώς να φορτώσετε HTML, ορίσετε DPI Συσκευής & διαβάσετε το χρώμα φόντου](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Δημιουργία HTML από JavaScript σε Java – Πλήρης Οδηγός βήμα‑βήμα](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/java/configuring-environment/_index.md b/html/hindi/java/configuring-environment/_index.md index 0212c4ef83..8283536e14 100644 --- a/html/hindi/java/configuring-environment/_index.md +++ b/html/hindi/java/configuring-environment/_index.md @@ -122,6 +122,8 @@ Aspose.HTML for Java में कस्टम यूज़र स्टाइ ### [Aspose HTML सैंडबॉक्स बनाएं – पूर्ण जावा गाइड](./create-aspose-html-sandbox-complete-java-guide/) Aspose.HTML में सैंडबॉक्स सेटअप करने की पूरी प्रक्रिया, कोड उदाहरण और सर्वोत्तम प्रथाओं के साथ। +### [Aspose.HTML for Java में कस्टम उपयोगकर्ता एजेंट और स्क्रीन आयाम सेट करें](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) + --- **Last Updated:** 2025-12-03 diff --git a/html/hindi/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/hindi/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..6d9953c610 --- /dev/null +++ b/html/hindi/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,191 @@ +--- +category: general +date: 2026-09-29 +description: Aspose.HTML for Java में कस्टम यूज़र एजेंट सेट करें और सटीक HTML रेंडरिंग + के लिए वर्चुअल स्क्रीन आकार कैसे सेट करें, सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: hi +lastmod: 2026-09-29 +og_description: Aspose.HTML for Java में कस्टम यूज़र एजेंट सेट करें और सटीक HTML रेंडरिंग + के लिए वर्चुअल स्क्रीन आकार कैसे सेट करें, सीखें। +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Aspose.HTML for Java में कस्टम यूज़र एजेंट और स्क्रीन डाइमेंशन सेट करें +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Aspose.HTML for Java में कस्टम उपयोगकर्ता एजेंट और स्क्रीन आयाम सेट करें +url: /hi/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.HTML for Java में कस्टम यूज़र एजेंट और स्क्रीन डाइमेंशन सेट करें + +यदि आपको Aspose.HTML for Java के साथ HTML रेंडर करते समय **कस्टम यूज़र एजेंट सेट** करना है, तो यह गाइड आपको ठीक-ठीक बताता है कि यह कैसे किया जाए। एक सैंडबॉक्स कॉन्फ़िगर करके आप **वर्चुअल स्क्रीन साइज सेट** करने की क्षमता भी प्राप्त करते हैं, जिससे लेआउट वास्तविक ब्राउज़र व्यूपोर्ट से मेल खाता है। + +आप इस ट्यूटोरियल को एक पूर्ण, चलाने योग्य प्रोग्राम के साथ समाप्त करेंगे जो **यूज़र एजेंट निर्दिष्ट** करता है, **स्क्रीन की चौड़ाई सेट** करता है, और **स्क्रीन की ऊँचाई सेट** करता है। कोई बाहरी टूल आवश्यक नहीं—सिर्फ Aspose.HTML for Java और Java 8+ रनटाइम। + +## आप क्या सीखेंगे + +* कैसे `SandboxConfiguration` बनाएं ताकि रेंडरिंग अलग रहे। +* कैसे **कस्टम यूज़र एजेंट सेट** करें और यह रिस्पॉन्सिव पेजों के लिए क्यों महत्वपूर्ण है। +* कैसे **वर्चुअल स्क्रीन साइज सेट** करें (स्क्रीन की चौड़ाई और ऊँचाई) सटीक लेआउट के लिए। +* कैसे सैंडबॉक्स में HTML फ़ाइल लोड करें और प्रोसेस्ड परिणाम सहेजें। +* सैंडबॉक्स्ड रेंडरिंग के सामान्य जाल और बेस्ट‑प्रैक्टिस टिप्स। + +> **पूर्वापेक्षाएँ** – आपको एक वैध Aspose.HTML for Java लाइसेंस, Java 8 या उससे नया, और एक IDE (IntelliJ IDEA, Eclipse, या VS Code) चाहिए। उदाहरण में एक स्थानीय `input.html` फ़ाइल का उपयोग किया गया है, लेकिन कोई भी पहुँच योग्य URL काम करेगा। + +![Sandbox flow diagram](sandbox-flow.png "set custom user agent example in Java") + +## चरण 1: सैंडबॉक्स कॉन्फ़िगरेशन बनाएं (बुनियाद) + +सैंडबॉक्स रेंडरिंग वातावरण को होस्ट JVM से अलग करता है, जो तब आवश्यक होता है जब आप **कस्टम यूज़र एजेंट सेट** करना चाहते हैं या व्यूपोर्ट साइज बदलना चाहते हैं। + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*इस चरण का कारण?* +`SandboxConfiguration` सभी रेंडरिंग विकल्पों को रखता है, जिसमें **स्क्रीन डाइमेंशन** और **यूज़र‑एजेंट** स्ट्रिंग्स शामिल हैं। दस्तावेज़ लोड करने से पहले इसे कॉन्फ़िगर करके, आप सुनिश्चित करते हैं कि HTML इंजन पहली अनुरोध से ही इन सेटिंग्स का सम्मान करे। + +## चरण 2: वास्तविक डिवाइस की नकल करने के लिए स्क्रीन डाइमेंशन सेट करें + +रिस्पॉन्सिव साइटें अक्सर `window.innerWidth` और `window.innerHeight` पढ़ती हैं। इंजन को 1024 × 768 स्क्रीन पर चल रहा समझाने के लिए, आप **वर्चुअल स्क्रीन साइज सेट** करते हैं: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*यह क्यों महत्वपूर्ण है* – यदि आप **स्क्रीन डाइमेंशन सेट** करना छोड़ देते हैं, तो रेंडरर डिफ़ॉल्ट रूप से एक बहुत छोटा व्यूपोर्ट ले सकता है, जिससे CSS मीडिया क्वेरीज़ मोबाइल लेआउट चुन लेती हैं। स्पष्ट रूप से **स्क्रीन की चौड़ाई सेट** और **स्क्रीन की ऊँचाई सेट** करके, आप नियंत्रित करते हैं कि कौन से CSS नियम लागू हों। + +## चरण 3: कस्टम यूज़र‑एजेंट स्ट्रिंग निर्दिष्ट करें + +कुछ वेब पेज यूज़र‑एजेंट हेडर के आधार पर अलग कंटेंट देते हैं। **यूज़र एजेंट निर्दिष्ट** करने के लिए आप इसे सैंडबॉक्स कॉन्फ़िगरेशन पर सेट करते हैं: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*कस्टम यूज़र एजेंट क्यों उपयोग करें?* +एक कस्टम स्ट्रिंग बॉट डिटेक्शन को बायपास कर सकती है, डेस्कटॉप‑केवल फीचर्स को ट्रिगर कर सकती है, या यह परीक्षण कर सकती है कि साइट किसी विशिष्ट ब्राउज़र संस्करण के लिए कैसे व्यवहार करती है। Aspose इंजन इस मान को बाहरी संसाधनों (CSS, इमेज, स्क्रिप्ट्स) लोड करते समय किए गए प्रत्येक HTTP अनुरोध के साथ फॉरवर्ड करता है। + +## चरण 4: सैंडबॉक्स के अंदर HTML दस्तावेज़ लोड करें + +अब सैंडबॉक्स पूरी तरह कॉन्फ़िगर हो गया है, HTML फ़ाइल लोड करें। वह कंस्ट्रक्टर जो फ़ाइल पाथ और `SandboxConfiguration` लेता है, स्वचालित रूप से सभी सेटिंग्स लागू करता है जो हमने परिभाषित की थीं। + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +यदि आपको रिमोट URL से लोड करना है, तो फ़ाइल पाथ को URL स्ट्रिंग से बदलें—Aspose.HTML अभी भी **कस्टम यूज़र एजेंट सेट** और **स्क्रीन डाइमेंशन** का सम्मान करेगा। + +## चरण 5: प्रोसेस्ड आउटपुट सहेजें + +दस्तावेज़ लोड होने के बाद, आप इसे किसी भी समर्थित फ़ॉर्मेट में सहेज सकते हैं। यहाँ हम एक सैंडबॉक्स्ड HTML फ़ाइल लिखते हैं जो कस्टम सेटिंग्स के कारण हुए किसी भी DOM परिवर्तन को दर्शाती है। + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +सहेजी गई फ़ाइल में वही मार्कअप होगा, लेकिन कोई भी स्क्रिप्ट जो `navigator.userAgent` या `window.innerWidth` को क्वेरी करती थी, अब वह मान देखेगी जो आपने प्रदान किए हैं। + +## पूर्ण, चलाने योग्य उदाहरण + +सभी चरणों को मिलाकर आपको एक स्व-निहित प्रोग्राम मिलता है जिसे आप कॉपी, पेस्ट और चलाएँ। + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### अपेक्षित आउटपुट + +प्रोग्राम चलाने से `sandboxed_output.html` बनता है। यदि आप इसे ब्राउज़र में खोलें और कंसोल के माध्यम से `navigator.userAgent` जांचें, तो आपको **AsposeHTML/1.0** दिखाई देगा। इसी तरह, `window.innerWidth` **1024** दिखाएगा, जिससे पुष्टि होगी कि **स्क्रीन डाइमेंशन सेट** सही ढंग से काम किया। + +## सामान्य प्रश्न एवं किनारी‑स्थिति संभाल + +| प्रश्न | उत्तर | +|----------|--------| +| **यदि पेज अलग डोमेन से अतिरिक्त संसाधन लोड करता है तो क्या होगा?** | सैंडबॉक्स प्रत्येक अनुरोध के साथ **कस्टम यूज़र एजेंट** फॉरवर्ड करता है, लेकिन क्रॉस‑ऑरिजिन नीतियां अभी भी लागू रहती हैं। यदि आपको इन प्रतिबंधों को ढीला करना है तो `sandboxConfig.setAllowCrossDomain(true)` उपयोग करें। | +| **क्या मैं दस्तावेज़ लोड होने के बाद स्क्रीन साइज बदल सकता हूँ?** | नहीं। स्क्रीन डाइमेंशन प्रारंभिक लेआउट पास के दौरान पढ़े जाते हैं। अलग साइज से रेंडर करने के लिए, नया `SandboxConfiguration` बनाएं और दस्तावेज़ को पुनः लोड करें। | +| **क्या मुझे `document.close()` कॉल करना आवश्यक है?** | `HTMLDocument` `AutoCloseable` को इम्प्लीमेंट करता है। try‑with‑resources ब्लॉक का उपयोग करने से उचित क्लीनअप सुनिश्चित होता है, लेकिन साधारण स्क्रिप्ट्स में स्पष्ट `close()` वैकल्पिक है। | +| **यह HTTP क्लाइंट में यूज़र‑एजेंट सेट करने से कैसे अलग है?** | सैंडबॉक्स पर यूज़र‑एजेंट सेट करने से HTML इंजन द्वारा किए गए **सभी** संसाधन अनुरोधों पर प्रभाव पड़ता है, न कि केवल प्रारंभिक HTML फ़ेच पर। यह वास्तविक ब्राउज़र के अधिक करीब है। | +| **क्या अनविश्वसनीय HTML के लिए सैंडबॉक्स सुरक्षित है?** | हाँ। सैंडबॉक्स फ़ाइल सिस्टम एक्सेस को अलग करता है और कॉन्फ़िगरेशन के अनुसार नेटवर्क कॉल्स को सीमित करता है, जिससे दुर्भावनापूर्ण स्क्रिप्ट्स के आपके होस्ट JVM को प्रभावित करने का जोखिम कम हो जाता है। | + +## प्रो टिप्स + +* कॉन्फ़िगरेशन पुन: उपयोग करें – यदि आप समान व्यूपोर्ट के साथ कई पेज रेंडर करते हैं, तो एक ही `SandboxConfiguration` बनाएं और उसे पुन: उपयोग करें ताकि ऑब्जेक्ट‑क्रिएशन ओवरहेड से बचा जा सके। +* लॉगिंग के साथ डिबग करें – Aspose.HTML लॉगिंग सक्षम करें (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) ताकि देखा जा सके कि कौन से संसाधन कस्टम यूज़र‑एजेंट के साथ फेच किए गए। +* CSS मीडिया क्वेरीज़ के साथ संयोजन – **स्क्रीन की चौड़ाई सेट** को समायोजित करके आप परीक्षण कर सकते हैं कि आपका रिस्पॉन्सिव डिज़ाइन टैबलेट, फोन या बड़े डेस्कटॉप पर वास्तविक ब्राउज़र खोले बिना कैसे व्यवहार करता है। + +## निष्कर्ष + +अब आप जानते हैं कि Aspose.HTML for Java के साथ HTML रेंडर करते समय **कस्टम यूज़र एजेंट सेट** और **स्क्रीन डाइमेंशन सेट** कैसे किया जाता है। सैंडबॉक्स कॉन्फ़िगर करके, आप वातावरण को अलग करते हैं, व्यूपोर्ट को नियंत्रित करते हैं, और सुनिश्चित करते हैं कि बाहरी संसाधन ठीक वही हेडर देखें जो आप निर्दिष्ट करते हैं। यह तकनीक रिस्पॉन्सिव लेआउट्स का परीक्षण करने, बॉट ब्लॉक्स को बायपास करने, या ऑटोमेटेड पाइपलाइन में डेस्कटॉप‑केवल फीचर्स को पुनः उत्पन्न करने के लिए आवश्यक है। + +अगला, आप **कस्टम कुकीज़ सेट करने** या Aspose.HTML के रेंडरिंग API का उपयोग करके **रेंडर किए गए स्क्रीनशॉट्स कैप्चर करने** की खोज कर सकते हैं—दोनों अवधारणाएँ उसी सैंडबॉक्स कॉन्फ़िगरेशन पैटर्न पर आधारित हैं जिसे आपने अभी सीखा है। + +कोडिंग का आनंद लें! + +## अब आप क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में दर्शाए गए तकनीकों पर निर्मित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API फीचर्स में महारत हासिल करने और अपने प्रोजेक्ट्स में वैकल्पिक कार्यान्वयन दृष्टिकोणों की खोज करने में मदद करती हैं। + +- [जावा में हाई DPI रेंडरिंग – कस्टम यूज़र एजेंट के साथ वेबपेज स्क्रीनशॉट कैप्चर करें](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [HTML लोड करना, डिवाइस DPI सेट करना और बैकग्राउंड कलर पढ़ना](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [जावा में HTML फ़ाइल बनाना और नेटवर्क सर्विस सेट अप करना (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/java/creating-managing-html-documents/_index.md b/html/hindi/java/creating-managing-html-documents/_index.md index cbdcf105d8..9f47346e36 100644 --- a/html/hindi/java/creating-managing-html-documents/_index.md +++ b/html/hindi/java/creating-managing-html-documents/_index.md @@ -56,6 +56,8 @@ Java में Aspose.HTML का उपयोग करके HTML दस्त स्ट्रिंग्स से HTML दस्तावेज़ बनाना सीखें। चरण‑दर‑चरण मार्गदर्शिका। ### [Java के लिए Aspose.HTML में URL से HTML दस्तावेज़ लोड करें](./load-html-documents-from-url/) URL से HTML दस्तावेज़ लोड करना आसान बनाएं। चरण‑दर‑चरण ट्यूटोरियल। +### [Java के लिए Aspose.HTML में HTML तत्व कैसे बनाएं](./how-to-create-html-element-in-java-using-aspose-html/) +HTML तत्वों को Java में Aspose.HTML का उपयोग करके बनाने की प्रक्रिया सीखें। ### [Java के लिए Aspose.HTML का उपयोग करके नए HTML दस्तावेज़ बनाएं](./generate-new-html-documents/) नए HTML दस्तावेज़ बनाना सीखें। गतिशील सामग्री बनाना शुरू करें। ### [Java के लिए Aspose.HTML में दस्तावेज़ लोड इवेंट को संभालें](./handle-document-load-events/) @@ -65,12 +67,15 @@ SVG दस्तावेज़ बनाना और प्रबंधित ### [Java में HTML के लिए सैंडबॉक्स बनाएं – चरण‑दर‑चरण गाइड](./create-sandbox-for-html-in-java-step-by-step-guide/) Java में HTML सैंडबॉक्स बनाने की प्रक्रिया सीखें, सुरक्षित परीक्षण और विकास के लिए चरण‑दर‑चरण मार्गदर्शिका। ### [Java में HTML क्वेरी कैसे करें – पूर्ण ट्यूटोरियल](./how-to-query-html-in-java-complete-tutorial/) -Java में Aspose.HTML का उपयोग करके HTML क्वेरी करने के चरण‑दर‑चरण मार्गदर्शिका, टिप्स और सर्वोत्तम प्रथाएँ। +Java में Aspose.HTML का उपयोग करके HTML क्वेरी करने की चरण‑दर‑चरण मार्गदर्शिका, टिप्स और सर्वोत्तम प्रथाएँ। +### [Java में querySelectorAll का उपयोग करके क्लास द्वारा तत्व चुनें](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Java में querySelectorAll का उपयोग करके क्लास द्वारा HTML तत्वों को चुनने की सरल गाइड। ### [Java में HTML अक्षरों की गिनती – Aspose HTML के साथ पूर्ण गाइड](./count-html-characters-in-java-full-guide-with-aspose-html/) Aspose.HTML for Java का उपयोग करके HTML दस्तावेज़ में अक्षरों की संख्या कैसे गिनें, चरण‑दर‑चरण पूर्ण मार्गदर्शिका। - ### [HTML दस्तावेज़ लोड करें जावा – XPath और CSS के साथ पूर्ण गाइड](./load-html-document-java-complete-guide-with-xpath-css/) +### [Java में XPath के साथ HTML तत्वों की गिनती कैसे करें](./how-to-count-html-elements-in-java-with-xpath/) + ### [Java के लिए Aspose.HTML में JSON प्राप्त करके सामग्री उत्पन्न करके HTML दस्तावेज़ बनाएं](./create-html-document-with-java-fetch-json-and-generate-conte/) ### [Java में HTML से टेक्स्ट निकालें – पूर्ण प्रोग्रामिंग गाइड](./extract-text-from-html-in-java-complete-programming-guide/) Aspose.HTML for Java का उपयोग करके HTML से टेक्स्ट निकालने की पूरी मार्गदर्शिका, चरण‑दर‑चरण उदाहरण और सर्वोत्तम प्रथाएँ। @@ -113,5 +118,4 @@ Aspose.HTML for Java का उपयोग करके HTML दस्ताव {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} - +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/hindi/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..7bf2a097fb --- /dev/null +++ b/html/hindi/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,217 @@ +--- +category: general +date: 2026-09-29 +description: Aspose.HTML और XPath का उपयोग करके जावा में HTML तत्वों की गिनती कैसे + करें, सीखें। यह गाइड दिखाता है कि कैसे एक HTML दस्तावेज़ लोड करें, XPath के साथ + नोड्स का चयन करें, और नोड सूची प्राप्त करें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: hi +lastmod: 2026-09-29 +og_description: Java में Aspose.HTML का उपयोग करके HTML तत्वों की गिनती कैसे करें। + इस पूर्ण ट्यूटोरियल का पालन करें ताकि आप एक HTML दस्तावेज़ लोड कर सकें, XPath के + साथ नोड्स का चयन कर सकें, Java में XPath का मूल्यांकन कर सकें, और एक नोड सूची प्राप्त + कर सकें। +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: जावा में HTML तत्वों की गणना कैसे करें – चरण-दर-चरण गाइड +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: XPath के साथ Java में HTML तत्वों की गणना कैसे करें +url: /hi/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Java में XPath के साथ HTML तत्वों की गणना कैसे करें + +यदि आपको Java एप्लिकेशन से वेब पेज में **how to count HTML elements** की आवश्यकता है, तो यह गाइड आपको एक पूर्ण, तुरंत चलाने योग्य समाधान प्रदान करता है। पहले दो वाक्यों के अंत तक आप बिल्कुल जान जाएंगे कि HTML दस्तावेज़ को कैसे लोड करें, XPath के साथ नोड्स को कैसे चुनें, और एक नोड सूची को कैसे प्राप्त करें जिसे आप गिन सकते हैं। + +हम Aspose.HTML for Java लाइब्रेरी का उपयोग करेंगे क्योंकि यह DOM‑compatible API और एक शक्तिशाली XPath इंजन प्रदान करती है। यह ट्यूटोरियल वह सब कुछ कवर करता है जिसकी आपको आवश्यकता है—इम्पोर्ट्स, कोड, व्याख्याएँ, और अपेक्षित आउटपुट—ताकि आप उदाहरण को अपने प्रोजेक्ट में कॉपी कर सकें और तुरंत परिणाम देख सकें। साथ ही हम **select nodes with XPath**, **get node list Java**, **load HTML document Java**, और **evaluate XPath in Java** पर भी चर्चा करेंगे। + +## आप क्या प्राप्त करेंगे + +* फ़ाइल सिस्टम से एक HTML फ़ाइल लोड करें। +* एक XPath अभिव्यक्ति बनाएं जो विशिष्ट तत्वों को लक्षित करती है। +* दस्तावेज़ के विरुद्ध XPath अभिव्यक्ति का मूल्यांकन करें। +* `NodeList` प्राप्त करें और गिनें कि कितने मिलते-जुलते तत्व मौजूद हैं। + +कोई बाहरी सेवाएँ या जटिल कॉन्फ़िगरेशन आवश्यक नहीं है; केवल आपके क्लासपाथ पर Aspose.HTML JAR रखें। + +--- + +## Java में XPath के साथ HTML तत्वों की गणना कैसे करें + +यह चरण‑दर‑चरण अनुभाग वह सटीक कोड दिखाता है जिसकी आपको आवश्यकता है। प्रत्येक उपखंड प्रक्रिया के एक तार्किक भाग से मेल खाता है, जिससे इसे अनुकूलित या विस्तारित करना आसान हो जाता है। + +### चरण 1: Java में HTML दस्तावेज़ लोड करें + +सबसे पहले, HTML फ़ाइल को मेमोरी में लाएँ। `HTMLDocument` क्लास फ़ाइल को पार्स करती है और एक DOM ट्री बनाती है जिसे XPath क्वेरी कर सकता है। + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Why this matters:** +दस्तावेज़ को लोड करने से एक DOM प्रतिनिधित्व बनता है, जो किसी भी XPath मूल्यांकन के लिए आवश्यक है। यदि फ़ाइल पथ गलत है, तो Aspose.HTML `FileNotFoundException` फेंकता है, इसलिए `input.html` के स्थान को दोबारा जांचें। + +### चरण 2: एक XPath अभिव्यक्ति बनाएं और उसका मूल्यांकन करें + +अब हम एक XPath बनाते हैं जो उन तत्वों को चुनता है जिन्हें हम गिनना चाहते हैं। इस उदाहरण में हम सभी `` टैग गिनते हैं जिनका `alt` एट्रिब्यूट `"logo"` के बराबर है। + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Why this matters:** +अभिव्यक्ति `//img[@alt='logo']` **select nodes with XPath** का एक संक्षिप्त तरीका है। `evaluate` कॉल **evaluate XPath in Java** करता है और एक सामान्य `XPathResult` लौटाता है। `NodeList` में कास्ट करने से हमें मिलते-जुलते नोड्स के संग्रह तक सीधा पहुँच मिलती है। + +### चरण 3: नोड सूची प्राप्त करें और उसकी गणना करें + +अंत में, हम गिनते हैं कि कितने नोड लौटाए गए। इस उद्देश्य के लिए `NodeList` API `getLength()` प्रदान करती है। + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Why this matters:** +`getLength()` **get node list Java** का सबसे सरल तरीका है और एक गणना प्राप्त करता है। यदि XPath कोई तत्व नहीं मिलाता, तो लंबाई `0` होगी, जिसे आपका एप्लिकेशन सहजता से संभाल सकता है। + +### पूरा चलाने योग्य उदाहरण + +नीचे पूरा प्रोग्राम दिया गया है, जिसमें सभी इम्पोर्ट्स और एक न्यूनतम `main` मेथड शामिल है। इसे `CountHtmlElements.java` नामक फ़ाइल में कॉपी करें, अपने प्रोजेक्ट में Aspose.HTML JAR जोड़ें, और चलाएँ। + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Expected output** + +यदि `input.html` में तीन `logo` टैग हैं, तो प्रोग्राम प्रिंट करेगा: + +``` +Found 3 logo images. +``` + +यदि ऐसी कोई छवि नहीं है, तो यह प्रिंट करेगा: + +``` +Found 0 logo images. +``` + +--- + +## सामान्य विविधताएँ और किनारे के मामले + +| स्थिति | क्या बदलें | कारण | +|-----------|----------------|--------| +| एक अलग तत्व की गणना करें (उदाहरण के लिए `
` जिसमें class `header` हो) | `//div[@class='header']` में XPath बदलें | XPath सिंटैक्स आपको किसी भी टैग/एट्रिब्यूट को लक्षित करने की अनुमति देता है। | +| सभी तत्वों की गणना करें चाहे उनका एट्रिब्यूट कुछ भी हो | `//*` को XPath अभिव्यक्ति के रूप में उपयोग करें | `//*` दस्तावेज़ में प्रत्येक तत्व नोड को चुनता है। | +| बड़े दस्तावेज़ जो मेमोरी पर दबाव डालते हैं | स्ट्रीमिंग पार्सर का उपयोग करें या फ्रैगमेंट पर XPath का मूल्यांकन करें | Aspose.HTML आंशिक पार्सिंग के लिए `HTMLDocumentFragment` प्रदान करता है। | +| वास्तविक नोड्स चाहिए, केवल गणना नहीं | `nodes.item(i)` पर इटररेट करें | गणना के बाद आप प्रत्येक नोड को प्रोसेस कर सकते हैं। | + +**Pro tip:** हमेशा `createXPathExpression` को पास करने से पहले XPath स्ट्रिंग को वैध करें। एक अमान्य अभिव्यक्ति `XPathException` फेंकती है, जिसे आप पकड़ कर एक उपयोगकर्ता‑मित्र त्रुटि संदेश प्रदान कर सकते हैं। + +--- + +## समस्या निवारण चेकलिस्ट + +1. **Library not found** – सुनिश्चित करें कि Aspose.HTML for Java JAR क्लासपाथ पर है (`-cp` या आपके IDE की डिपेंडेंसीज़)। +2. **File not found** – पुष्टि करें कि `input.html` कार्य निर्देशिका के सापेक्ष स्थित है या एक पूर्ण पथ का उपयोग करें। +3. **Zero results** – एट्रिब्यूट मानों और केस संवेदनशीलता (`alt='logo'` बनाम `alt='Logo'`) को दोबारा जांचें। XPath केस‑सेंसिटिव है। +4. **Performance concerns** – यदि आपको एक ही फ़ाइल पर कई XPath क्वेरी चलानी हों तो एक ही `HTMLDocument` इंस्टेंस को पुन: उपयोग करें। + +--- + +## निष्कर्ष + +अब आप Aspose.HTML और XPath का उपयोग करके Java में **how to count HTML elements** को जानते हैं। HTML दस्तावेज़ को लोड करके, एक XPath अभिव्यक्ति बनाकर, **evaluate XPath in Java** करके, और एक **node list** प्राप्त करके, आप शीघ्रता से मिलते-जुलते तत्वों की संख्या निर्धारित कर सकते हैं। यह तकनीक किसी भी टैग या एट्रिब्यूट के लिए काम करती है, जिससे यह वेब‑स्क्रैपिंग, स्वचालित परीक्षण, या सामग्री विश्लेषण के लिए एक बहुमुखी उपकरण बन जाता है। + +अगले चरणों में आप शामिल कर सकते हैं: + +* **select nodes with XPath** का उपयोग करके एट्रिब्यूट मान निकालें (उदाहरण के लिए इमेज `src`)। +* कई XPath क्वेरी को मिलाकर तत्व सांख्यिकी की रिपोर्ट बनाएं। +* इस लॉजिक को बड़े Java सर्विस में एकीकृत करें जो बड़े पैमाने पर HTML फ़ाइलों को प्रोसेस करता है। + +विभिन्न XPath अभिव्यक्तियों और दस्तावेज़ संरचनाओं के साथ प्रयोग करने में संकोच न करें—HTML तत्वों की गणना केवल शुरुआत है! + +## आप आगे क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन निकट-संबंधित विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API सुविधाओं में निपुण बनने और अपने प्रोजेक्ट में वैकल्पिक कार्यान्वयन दृष्टिकोणों का अन्वेषण करने में मदद करती हैं। + +- [How to Parse HTML Java – Load, Query & Count Elements](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Load HTML Document Java – Complete Guide with XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/hindi/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..e5faeb5561 --- /dev/null +++ b/html/hindi/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,183 @@ +--- +category: general +date: 2026-09-29 +description: जावा में HTML तत्व बनाना, एक पैराग्राफ जोड़ना, उसका टेक्स्ट सेट करना, + और Aspose.HTML के साथ इसे बॉडी में जोड़ना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: hi +lastmod: 2026-09-29 +og_description: Aspose.HTML का उपयोग करके जावा में एक पैराग्राफ जोड़कर, उसका टेक्स्ट + सेट करके, और उसे बॉडी में जोड़कर HTML तत्व बनाएं। +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: Java में HTML तत्व बनाएं – चरण‑दर‑चरण Aspose.HTML गाइड +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: Aspose.HTML का उपयोग करके जावा में HTML तत्व कैसे बनाएं +url: /hi/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# जावा में Aspose.HTML का उपयोग करके HTML तत्व कैसे बनाएं + +यदि आपको जावा एप्लिकेशन में **HTML तत्व बनाना** है, तो यह गाइड आपको एक पूर्ण, चलाने योग्य समाधान दिखाता है। आप देखेंगे कि कैसे **एक पैराग्राफ जोड़ें**, उसका टेक्स्ट सेट करें, और **मौजूदा HTML फ़ाइल के बॉडी में तत्व जोड़ें** Aspose.HTML के साथ। + +यह ट्यूटोरियल दस्तावेज़ लोड करने से लेकर संशोधित फ़ाइल को सहेजने तक सब कुछ कवर करता है, ताकि आप कोड को अपने प्रोजेक्ट में बिना अतिरिक्त शोध के कॉपी कर सकें। + +## आवश्यकताएँ + +* Java 17 या बाद का संस्करण स्थापित हो। +* Aspose.HTML for Java 23.10 (या नवीनतम संस्करण) आपके प्रोजेक्ट के क्लासपाथ में जोड़ा गया हो। +* एक साधारण `input.html` फ़ाइल ज्ञात डायरेक्टरी में हो। फ़ाइल खाली (``) भी हो सकती है या उसमें मौजूदा मार्कअप हो। + +## चरण 1: मौजूदा HTML दस्तावेज़ लोड करें + +स्रोत फ़ाइल को लोड करने से आपको एक संशोधित करने योग्य DOM ट्री मिलती है। + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +`HTMLDocument` कंस्ट्रक्टर फ़ाइल को पार्स करता है और एक लाइव DOM बनाता है। यदि फ़ाइल पढ़ी नहीं जा सकती, तो Aspose.HTML `IOException` फेंकता है; आप अपवाद को आगे बढ़ने दे सकते हैं या इसे try‑catch ब्लॉक से संभाल सकते हैं। + +## चरण 2: नया `

` तत्व बनाएं और HTML में टेक्स्ट जोड़ें + +नया तत्व बनाना ब्राउज़र में `document.createElement` का उपयोग करने जैसा ही है। + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` स्वचालित रूप से एक टेक्स्ट नोड बनाता है और उसे तत्व से जोड़ता है, जो **HTML में टेक्स्ट जोड़ने** का अनुशंसित तरीका है। यह मेथड उन अक्षरों को भी एस्केप करता है जो मार्कअप को तोड़ सकते हैं। + +## चरण 3: तत्व को बॉडी में जोड़ें + +अब जब पैराग्राफ तैयार है, आपको इसे दस्तावेज़ के `` के भीतर रखना होगा। + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` `` नोड लौटाता है, और `appendChild` नया `

` को अंतिम चाइल्ड के रूप में जोड़ता है। यदि दस्तावेज़ में `` तत्व नहीं है (एक सही‑फ़ॉर्मेटेड HTML फ़ाइल के लिए असामान्य), तो Aspose.HTML इसे स्वचालित रूप से बनाता है। + +## चरण 4: संशोधित दस्तावेज़ को सहेजें + +अंत में, अपडेटेड DOM को डिस्क पर वापस लिखें। + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` DOM को सीरियलाइज़ करता है, मौजूदा मार्कअप को संरक्षित रखता है और नया पैराग्राफ जोड़ता है। परिणामी `output.html` में यह होगा: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## पूर्ण स्रोत कोड (java html उदाहरण) + +सभी चरणों को मिलाकर आपको एक स्व-निहित प्रोग्राम मिलता है जिसे आप तुरंत चला सकते हैं। + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### कोड क्या करता है + +| चरण | क्रिया | क्यों महत्वपूर्ण है | +|------|--------|-------------------| +| दस्तावेज़ लोड करें | `new HTMLDocument(...)` | स्रोत HTML को DOM में पार्स करता है जिसे आप संशोधित कर सकते हैं। | +| तत्व बनाएं | `doc.createElement("p")` | ब्राउज़र API की नकल करता है, जिससे तत्व HTML मानकों के अनुसार बनता है। | +| टेक्स्ट सेट करें | `setTextContent(...)` | सही एस्केपिंग सुनिश्चित करता है और मैन्युअल टेक्स्ट‑नोड निर्माण से बचाता है। | +| बॉडी में जोड़ें | `doc.getBody().appendChild(...)` | नया तत्व उस स्थान पर रखता है जहाँ ब्राउज़र इसे रेंडर करेंगे। | +| फ़ाइल सहेजें | `doc.save(...)` | परिवर्तनों को स्थायी करता है, एक वैध HTML फ़ाइल बनाता है जो आगे उपयोग के लिए तैयार है। | + +## सामान्य विविधताएँ और किनारे के मामले + +* **एकाधिक तत्व जोड़ना** – `save` कॉल करने से पहले प्रत्येक नए नोड के लिए चरण 2‑3 दोहराएँ। +* **किसी विशिष्ट नोड से पहले डालना** – `appendChild` के बजाय `insertBefore(newNode, referenceNode)` उपयोग करें। +* **फ़्रैगमेंट के साथ काम करना** – `doc.createDocumentFragment()` आपको नोड्स का समूह बनाने और एक ही ऑपरेशन में जोड़ने देता है, जो बड़े अपडेट्स के लिए प्रदर्शन सुधारता है। +* **UTF‑8 अक्षरों को संभालना** – Aspose.HTML स्वचालित रूप से UTF‑8 लिखता है; बस सुनिश्चित करें कि आपका स्रोत फ़ाइल भी उसी तरह एन्कोडेड हो। + +## व्यावहारिक टिप्स + +* **पाथ हैंडलिंग** – प्लेटफ़ॉर्म‑स्वतंत्र फ़ाइल पाथ बनाने के लिए `java.nio.file.Paths` का उपयोग करें। +* **अपवाद सुरक्षा** – यदि आपको अतिरिक्त स्ट्रीम्स बंद करने की आवश्यकता है तो पूरे ब्लॉक को try‑with‑resources स्टेटमेंट में रखें। +* **प्रदर्शन** – बहुत बड़े HTML फ़ाइलों के लिए, `HTMLDocument(String, LoadOptions)` के साथ दस्तावेज़ लोड करने पर विचार करें जहाँ आप बाहरी संसाधनों को निष्क्रिय करके पार्सिंग को तेज़ कर सकते हैं। + +## परिणाम की पुष्टि करें + +प्रोग्राम चलाने के बाद, किसी भी ब्राउज़र में `output.html` खोलें। आपको पैराग्राफ “Added by Aspose.HTML” मूल बॉडी के अंत में दिखना चाहिए। पेज स्रोत की जाँच करें ताकि पुष्टि हो सके कि `

` तत्व `` के भीतर मौजूद है। + +## निष्कर्ष + +अब आप जानते हैं कि जावा में **HTML तत्व कैसे बनाएं**, **पैराग्राफ जोड़ें**, **HTML में टेक्स्ट जोड़ें**, और Aspose.HTML का उपयोग करके **तत्व को बॉडी में जोड़ें**। पूर्ण **java html उदाहरण** एक साफ़, प्रोडक्शन‑रेडी वर्कफ़्लो दर्शाता है जिसे आप HTML दस्तावेज़ के किसी भी भाग को संशोधित करने के लिए विस्तारित कर सकते हैं। + +अगला, **एट्रिब्यूट्स संशोधित करना**, **नोड्स हटाना**, या **CSS स्टाइल्स के साथ काम करना** जैसे संबंधित विषयों का अन्वेषण करें ताकि अधिक समृद्ध HTML प्रोसेसिंग पाइपलाइन बना सकें। कोडिंग का आनंद लें! + +## अगला आपको क्या सीखना चाहिए? + +निम्नलिखित ट्यूटोरियल्स उन निकट संबंधित विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं जो आपको अतिरिक्त API सुविधाओं में निपुण बनने और अपने प्रोजेक्ट में वैकल्पिक कार्यान्वयन दृष्टिकोणों का अन्वेषण करने में मदद करती हैं। + +- [जावा के साथ नया HTML तत्व बनाएं – पूर्ण Aspose.HTML गाइड](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [जावा में बॉडी में चाइल्ड जोड़ें – पूर्ण Aspose.HTML ट्यूटोरियल](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Aspose.HTML for Java के साथ DOM म्यूटेशन ऑब्ज़र्वर का उपयोग करके बॉडी में तत्व जोड़ें](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/hindi/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..fa97563ade --- /dev/null +++ b/html/hindi/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,253 @@ +--- +category: general +date: 2026-09-29 +description: जावा में क्लास द्वारा तत्वों का चयन करना, फ़ाइल से HTML पढ़ना, और बाहरी + लिंक ढूँढ़ना सीखें। यह चरण‑दर‑चरण गाइड NodeList को कुशलतापूर्वक इटररेट करने को कवर + करता है। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: hi +lastmod: 2026-09-29 +og_description: Java में क्लास द्वारा तत्वों का चयन करें, फ़ाइल से HTML पढ़ें, और + querySelectorAll का उपयोग करके बाहरी लिंक खोजें। NodeList को इटररेट करने के लिए + पूर्ण उदाहरण का पालन करें। +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: जावा में क्लास द्वारा तत्व चुनें – querySelectorAll के साथ पूर्ण गाइड +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: जावा में querySelectorAll का उपयोग करके क्लास द्वारा तत्वों का चयन कैसे करें +url: /hi/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Java में querySelectorAll का उपयोग करके क्लास द्वारा एलिमेंट्स का चयन कैसे करें + +यदि आपको Java में HTML फ़ाइल को प्रोसेस करते समय **क्लास द्वारा एलिमेंट्स का चयन** करने की आवश्यकता है, तो यह गाइड आपको ठीक-ठीक बताता है कि इसे कैसे करें। आप फ़ाइल से HTML पढ़ना, `querySelectorAll` का उपयोग करके बाहरी लिंक ढूँढना, और प्राप्त `NodeList` को सुरक्षित रूप से इटरेट करना सीखेंगे। + +Java में HTML के साथ काम करना अक्सर भारी महसूस होता है, लेकिन आधुनिक लाइब्रेरीज़ आपको एक संक्षिप्त, CSS‑सेलेक्टर‑आधारित API देती हैं। नीचे दिया गया उदाहरण **jsoup** (संस्करण 1.17.2) का उपयोग करता है क्योंकि यह `querySelectorAll`‑शैली के सेलेक्टर लागू करता है और एक `Elements` कलेक्शन लौटाता है जो `NodeList` की तरह व्यवहार करता है। आप आवश्यकता पड़ने पर इसी लॉजिक को अन्य DOM इम्प्लीमेंटेशन में भी अनुकूलित कर सकते हैं। + +## आवश्यकताएँ + +* JDK 17 या नया स्थापित हो। +* निर्भरता प्रबंधन के लिए Maven या Gradle। +* Java streams और DOM मॉडल की बुनियादी समझ। + +अपने प्रोजेक्ट में jsoup जोड़ें: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## चरण 1: फ़ाइल से HTML पढ़ें + +पहला कार्य डिस्क से HTML दस्तावेज़ लोड करना है। `Jsoup.parse(Path, Charset)` फ़ाइल को पढ़ता है और एक DOM ट्री बनाता है जिसे आप क्वेरी कर सकते हैं। + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*क्यों यह महत्वपूर्ण है*: फ़ाइल को एक बार लोड करने से बाद में एलिमेंट्स पर इटरेट करते समय बार‑बार I/O से बचा जा सकता है। `Document` ऑब्जेक्ट पूर्ण DOM रखता है, जिससे तेज़ सेलेक्टर क्वेरी संभव होती है। + +## चरण 2: `querySelectorAll` का उपयोग करके क्लास द्वारा एलिमेंट्स का चयन करें + +अब जब दस्तावेज़ मेमोरी में है, आप CSS सेलेक्टर का उपयोग करके **क्लास द्वारा एलिमेंट्स का चयन** कर सकते हैं। सेलेक्टर `"a.external"` उन `` टैग्स से मेल खाता है जिनमें `external` क्लास है—बिल्कुल वही जो आपको **बाहरी लिंक खोजने** के लिए चाहिए। + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*क्यों यह महत्वपूर्ण है*: क्लास सेलेक्टर का उपयोग अभिव्यक्तिपूर्ण और प्रदर्शन‑उपयुक्त दोनों है। लाइब्रेरी सेलेक्टर को एक अनुकूलित ट्रैवर्सल में बदल देती है, इसलिए आपको हर नोड पर मैन्युअल लूप लिखने की जरूरत नहीं है। + +## चरण 3: Java में NodeList (Elements) को इटरेट करें + +`Elements` `Iterable` को इम्प्लीमेंट करता है, जिसका अर्थ है कि आप एक सामान्य `for‑each` लूप का उपयोग करके **NodeList Java** ऑब्जेक्ट्स को **इटरेट** कर सकते हैं। नीचे दिया गया लूप प्रत्येक लिंक के `href` एट्रिब्यूट को प्रिंट करता है। + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*क्यों यह महत्वपूर्ण है*: सीधा इटरेशन कोड को पढ़ने योग्य बनाता है और जब आपको केवल साधारण आउटपुट चाहिए तो कलेक्शन को स्ट्रीम में बदलने के ओवरहेड से बचाता है। + +## पूर्ण कार्यशील उदाहरण + +तीन चरणों को मिलाकर एक स्व-निहित प्रोग्राम बनता है जिसे आप कमांड लाइन से चला सकते हैं। + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### अपेक्षित आउटपुट + +मान लीजिए `input.html` में यह है: + +```html +Example +About +OpenAI +``` + +प्रोग्राम चलाने पर यह प्रिंट करता है: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## प्रो टिप्स और सामान्य pitfalls + +* **Encoding matters** – फ़ाइल को हमेशा UTF‑8 (या आपके स्रोत के अनुरूप charset) से पढ़ें। गलत एन्कोडिंग एट्रिब्यूट मानों में अक्षरों को भ्रष्ट कर सकती है। +* **Multiple classes** – यदि किसी एलिमेंट में कई क्लासेज़ हैं (जैसे `class="btn external"`), तो सेलेक्टर `"a.external"` फिर भी मेल खाता है क्योंकि CSS क्लास सेलेक्टर टोकन की उपस्थिति को जाँचता है, न कि पूरी स्ट्रिंग को। +* **Performance tip** – यदि आपको केवल `href` एट्रिब्यूट चाहिए, तो आप इसे सीधे `doc.select("a.external[href]").eachAttr("href")` से प्राप्त कर सकते हैं। इससे प्रत्येक मैच के लिए पूर्ण `Element` ऑब्जेक्ट बनाने से बचा जा सकता है। +* **Null safety** – `link.attr("href")` यदि एट्रिब्यूट मौजूद नहीं है तो खाली स्ट्रिंग लौटाता है, इसलिए प्रिंट करने से पहले आपको null चेक करने की आवश्यकता नहीं है। + +## अक्सर पूछे जाने वाले प्रश्न + +**Q: क्या यह उन HTML फ्रैगमेंट्स के साथ काम करता है जिनमें `` रूट नहीं है?** +A: हाँ। `Jsoup.parse` इनपुट को एक फ्रैगमेंट मानता है और स्वचालित रूप से गायब रूट एलिमेंट्स जोड़ देता है, जिससे सेलेक्टर्स फ्रैगमेंट के बॉडी पर काम कर सकते हैं। + +**Q: क्या मैं `querySelectorAll` को jsoup के बिना उपयोग कर सकता हूँ?** +A: मानक Java DOM API (`org.w3c.dom`) में `querySelectorAll` नहीं है। **HTMLUnit** या **jodd-lagarto** जैसी लाइब्रेरीज़ समान मेथड प्रदान करती हैं। यहाँ दिखाया गया पैटर्न—लोड, CSS से चयन, इटरेट—वही रहता है। + +**Q: यदि मुझे लिंक को केवल प्रिंट करने के बजाय संशोधित करना हो तो क्या करें?** +A: प्रत्येक `Element` प्राप्त करने के बाद, आप `link.attr("href", "newUrl")` कॉल कर सकते हैं और फिर `Files.writeString` से दस्तावेज़ को डिस्क पर वापस लिख सकते हैं। + +## निष्कर्ष + +अब आप जानते हैं कि **क्लास द्वारा एलिमेंट्स का चयन** कैसे करें, **फ़ाइल से HTML पढ़ें**, **बाहरी लिंक खोजें**, और `querySelectorAll`‑शैली के सेलेक्टर्स का उपयोग करके **Java में NodeList को इटरेट** करें। पूरा उदाहरण एक साफ़, प्रोडक्शन‑रेडी वर्कफ़्लो दर्शाता है जिसे आप बड़े स्क्रैपिंग या ट्रांसफ़ॉर्मेशन पाइपलाइन में एम्बेड कर सकते हैं। + +अगला, **HTMLUnit के साथ डायनामिक कंटेंट पार्सिंग**, **संशोधित HTML को डिस्क पर वापस लिखना**, या **Java streams का उपयोग करके लिंक URLs को लिस्ट में इकट्ठा करना** जैसे संबंधित विषयों का अन्वेषण करें। इन सभी में यहाँ दर्शाए गए क्लास‑आधारित चयन की मूल तकनीक का उपयोग होता है। हैप्पी कोडिंग! + +## अब आपको क्या सीखना चाहिए? + +निम्नलिखित ट्यूटोरियल्स उन निकट-संबंधित विषयों को कवर करते हैं जो इस गाइड में दिखाए गए तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जो आपको अतिरिक्त API फीचर्स में निपुण बनने और अपने प्रोजेक्ट्स में वैकल्पिक इम्प्लीमेंटेशन अप्रोचेज़ को एक्सप्लोर करने में मदद करेंगे। + +- [Java में HTML क्वेरी कैसे करें – एलिमेंट्स का चयन, एट्रिब्यूट द्वारा फ़िल्टर, और टेक्स्ट प्राप्त करें](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [NodeList Java को इटरेट करें – HTML पढ़ें और इमेज src प्राप्त करें](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [Aspose.HTML for Java में फ़ाइल से HTML दस्तावेज़ लोड करें](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/java/css-html-form-editing/_index.md b/html/hindi/java/css-html-form-editing/_index.md index 8ce6c7ed1d..a377deb0a7 100644 --- a/html/hindi/java/css-html-form-editing/_index.md +++ b/html/hindi/java/css-html-form-editing/_index.md @@ -42,6 +42,8 @@ Aspose.HTML for Java का उपयोग करके किसी तत् ### [Java में CSS पढ़ना – Aspose.HTML के साथ पूर्ण गाइड](./how-to-read-css-in-java-complete-guide-with-aspose-html/) Aspose.HTML का उपयोग करके Java में CSS फ़ाइलों को पढ़ने और पार्स करने की पूरी प्रक्रिया सीखें। +### [Java में Aspose.HTML के साथ HTML से CSS पढ़ें](./how-to-read-css-from-html-with-aspose-html-in-java/) +Java में Aspose.HTML का उपयोग करके HTML दस्तावेज़ से CSS पढ़ने की प्रक्रिया सीखें। ### [Java के साथ HTML पार्स करें: CSS प्रॉपर्टी निकालें और फ़ॉन्ट आकार प्राप्त करें](./parse-html-with-java-extract-css-property-and-get-font-size/) इस ट्यूटोरियल में Java का उपयोग करके HTML से CSS प्रॉपर्टी निकालना और फ़ॉन्ट साइज प्राप्त करना सीखें। ### [Java में HTML क्वेरी कैसे करें – HTML लोड करें, CSS सेलेक्टर, और हेडिंग्स निकालें](./how-to-query-html-in-java-load-html-css-selector-and-extract/) diff --git a/html/hindi/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/hindi/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..8286e5dc5c --- /dev/null +++ b/html/hindi/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,277 @@ +--- +category: general +date: 2026-09-29 +description: Aspose.HTML for Java का उपयोग करके HTML से CSS पढ़ने का तरीका। ID द्वारा + तत्व चुनना, गणना किया गया स्टाइल प्राप्त करना, CSS गुण निकालना, और बैकग्राउंड रंग + प्रदर्शित करना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: hi +lastmod: 2026-09-29 +og_description: Aspose.HTML for Java का उपयोग करके HTML से CSS पढ़ने का तरीका। ID + द्वारा तत्व चुनने, गणना किया गया स्टाइल प्राप्त करने, CSS निकालने और बैकग्राउंड + रंग दिखाने के लिए चरण‑दर‑चरण निर्देश। +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: Aspose.HTML के साथ HTML से CSS पढ़ने का तरीका – Java गाइड +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: Aspose.HTML का उपयोग करके जावा में HTML से CSS कैसे पढ़ें +url: /hi/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Aspose.HTML के साथ Java में HTML से CSS पढ़ने का तरीका + +यदि आपको Java एप्लिकेशन में HTML फ़ाइल से **how to read css** पढ़ने की आवश्यकता है, तो यह गाइड आपको बिल्कुल वही दिखाएगा। पहले दो वाक्यों के अंत तक आप जान जाएंगे कि कैसे id द्वारा तत्व चुनें, गणना किया गया स्टाइल प्राप्त करें, और बैकग्राउंड कलर दिखाएँ—सभी Aspose.HTML के साथ। + +हम HTML दस्तावेज़ लोड करने, एक विशिष्ट तत्व को खोजने, उसकी गणना किया गया CSS निकालने, और background‑color मान को प्रिंट करने की प्रक्रिया को चरण‑दर‑चरण दिखाएंगे। Aspose.HTML for Java लाइब्रेरी के अलावा कोई बाहरी टूल आवश्यक नहीं है, और कोड Java 8+ के साथ काम करता है। + +## आप क्या सीखेंगे + +* Aspose.HTML का उपयोग करके HTML दस्तावेज़ से CSS पढ़ने का तरीका। +* `querySelector` के साथ **select element by id**। +* किसी भी DOM नोड के लिए **get computed style**। +* HTML से **extract CSS from HTML** और व्यक्तिगत प्रॉपर्टीज़ जैसे **display background color** पढ़ना। +* विश्वसनीय CSS निष्कर्षण के लिए सामान्य कठिनाइयाँ और बेस्ट‑प्रैक्टिस टिप्स। + +### आवश्यकताएँ + +* Java 8 या नया स्थापित हो। +* Aspose.HTML निर्भरता को प्रबंधित करने के लिए Maven या Gradle। +* एक सरल HTML फ़ाइल (जैसे `input.html`) जिसमें वह तत्व हो जिसमें `id` एट्रिब्यूट हो जिसे आप निरीक्षण करना चाहते हैं। + +--- + +## चरण 1: HTML दस्तावेज़ लोड करें (how to read css) + +किसी भी CSS‑reading वर्कफ़्लो में पहला कार्य स्रोत HTML को लोड करना होता है। Aspose.HTML `HTMLDocument` क्लास प्रदान करता है जो फ़ाइल को पार्स करता है और एक DOM बनाता है जिसे आप क्वेरी कर सकते हैं। + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Why this matters:** दस्तावेज़ को लोड करने से एक पूर्ण DOM बनता है, जिससे विश्वसनीय स्टाइल गणना संभव होती है जो ब्राउज़र द्वारा उत्पन्न परिणाम के समान होती है। इस चरण को छोड़ने पर आपको केवल कच्चा टेक्स्ट मिलेगा, न कि संरचित दस्तावेज़। + +--- + +## चरण 2: id द्वारा तत्व चुनें + +किसी विशिष्ट नोड के लिए CSS निकालने के लिए पहले आपको उस नोड का रेफ़रेंस चाहिए। `querySelector` मेथड कोई भी CSS सिलेक्टर स्वीकार करता है, जिससे ID द्वारा चयन करना आसान हो जाता है। + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Why use `querySelector`?:** यह वही सिलेक्टर सिंटैक्स उपयोग करता है जो आप CSS में उपयोग करते हैं, इसलिए आप `#myDiv`, `.className`, या एट्रिब्यूट सिलेक्टर्स जैसी परिचित पैटर्न को अतिरिक्त पार्सिंग लॉजिक के बिना पुन: उपयोग कर सकते हैं। + +--- + +## चरण 3: तत्व की गणना किया गया स्टाइल प्राप्त करें + +एक बार जब आपके पास तत्व हो, तो Aspose.HTML **computed style**—सभी CSS नियमों, विरासत और डिफ़ॉल्ट्स के लागू होने के बाद अंतिम मान—की गणना कर सकता है। + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Why compute the style?:** गणना किया गया स्टाइल वास्तविक मान दर्शाता है जो ब्राउज़र रेंडर करेगा, न कि केवल कच्ची घोषणाएँ। यह प्रभावी `background-color`, `font-size` या किसी भी अन्य प्रॉपर्टी को जानने के लिए आवश्यक है। + +--- + +## चरण 4: CSS प्रॉपर्टी निकालें और बैकग्राउंड कलर दिखाएँ + +अब जब आपके पास `StyleDeclaration` है, तो आप कोई भी CSS प्रॉपर्टी पढ़ सकते हैं। इस उदाहरण में हम **display background color** पर ध्यान केंद्रित करते हैं, लेकिन वही तरीका `font-size`, `margin` आदि के लिए भी काम करता है। + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**अपेक्षित आउटपुट** + +``` +Background color: rgb(255, 0, 0) +``` + +यदि तत्व अपना बैकग्राउंड किसी पैरेंट या स्टाइलशीट से विरासत में लेता है, तो गणना किया गया मान पहले से ही उस विरासत को शामिल करेगा। + +--- + +## किनारे के मामलों और विविधताओं को संभालना + +### Element not found +यदि `querySelector` `null` लौटाता है, तो ऊपर का कोड पहले ही एक त्रुटि प्रिंट करता है और बाहर निकल जाता है। प्रोडक्शन में आप कस्टम एक्सेप्शन फेंकना या डिफ़ॉल्ट तत्व पर फॉल्बैक करना चाह सकते हैं। + +### Multiple elements with the same ID (invalid HTML) +हालांकि IDs अद्वितीय होने चाहिए, खराब HTML में डुप्लिकेट हो सकते हैं। `querySelector` पहला मिलान लौटाता है। सभी मिलानों को प्रोसेस करने के लिए `querySelectorAll` उपयोग करें और प्राप्त `NodeList` पर इटरेट करें। + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Different CSS properties +**extract css from html** को बैकग्राउंड कलर के अलावा अन्य प्रॉपर्टीज़ के लिए निकालने हेतु, बस `StyleDeclaration` पर उपयुक्त गेटर कॉल करें। सामान्य गेटर शामिल हैं: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +यदि कोई प्रॉपर्टी स्पष्ट रूप से सेट नहीं है, तो गेटर गणना किया गया डिफ़ॉल्ट लौटाता है (उदा., `
` के लिए `display: block`)। + +### Browser‑specific prefixes +Aspose.HTML वेंडर‑प्रिफ़िक्स्ड प्रॉपर्टीज़ (जैसे `-webkit-transform`) को संभव होने पर उनके मानक समकक्ष में सामान्यीकृत करता है। यदि आपको कच्चा मान चाहिए, तो आप सीधे `StyleDeclaration` मैप को क्वेरी कर सकते हैं: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +--- + +## पूर्ण चलाने योग्य उदाहरण + +नीचे एक स्व-समावेशी Java क्लास है जो सभी चरणों को जोड़ता है। `YOUR_DIRECTORY/input.html` को अपने HTML फ़ाइल के पाथ से बदलें। + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**प्रोग्राम चलाना** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +आपको कंसोल में बैकग्राउंड कलर प्रिंट होता दिखेगा, जिससे पुष्टि होगी कि आपने सफलतापूर्वक **how to read css**, **select element by id**, **get computed style**, और **display background color** किया है। + +--- + +## बेस्ट‑प्रैक्टिस टिप्स (प्रो टिप्स) + +* **`HTMLDocument` को कैश करें** यदि आपको कई तत्वों से CSS पढ़ना है; फ़ाइल को बार‑बार पार्स करने से प्रदर्शन पर असर पड़ता है। +* **लोड करने से पहले HTML को वैलिडेट करें**—गलत मार्कअप से नोड्स गायब या गलत गणना किए गए मान हो सकते हैं। +* **try‑with‑resources** का उपयोग करें (या स्पष्ट `dispose`) ताकि Aspose.HTML ऑब्जेक्ट्स द्वारा रखे गए नेटिव रिसोर्सेज़ मुक्त हो सकें। +* **जटिल स्टाइल्स को डिबग करते समय पूर्ण `StyleDeclaration` लॉग करें**: `System.out.println(computedStyle.getCssText());` आपको प्रत्येक गणना किए गए प्रॉपर्टी का स्नैपशॉट देता है। + +--- + +## निष्कर्ष + +आप अब Java में Aspose.HTML का उपयोग करके HTML फ़ाइल से **how to read CSS** जान चुके हैं। दस्तावेज़ लोड करके, **select element by id**, **get computed style**, और **background‑color** प्रॉपर्टी निकालकर, आप प्रोग्रामेटिक रूप से किसी भी स्टाइलिंग जानकारी को निरीक्षण कर सकते हैं जो ब्राउज़र लागू करता है। + +अब आप इस समाधान को अन्य CSS एट्रिब्यूट्स निकालने, कई तत्वों को संभालने, या डेटा को UI‑टेस्टिंग फ्रेमवर्क में एकीकृत करने के लिए विस्तारित कर सकते हैं। + +Happy coding, and feel free to experiment with different selectors and style properties to suit your project's needs! + +## आगे आप क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जिससे आप अतिरिक्त API फीचर्स में महारत हासिल कर सकें और अपने प्रोजेक्ट में वैकल्पिक इम्प्लीमेंटेशन एप्रोच खोज सकें। + +- [Java में CSS प्राप्त करें – Aspose.HTML के साथ गणना किया गया स्टाइल प्राप्त करें](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [Java में CSS पढ़ें – Aspose.HTML के साथ पूर्ण गाइड](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Java में गणना किया गया स्टाइल प्राप्त करें – HTML से बैकग्राउंड कलर निकालें](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hindi/java/editing-html-documents/_index.md b/html/hindi/java/editing-html-documents/_index.md index 038c461e56..1f6eb35f44 100644 --- a/html/hindi/java/editing-html-documents/_index.md +++ b/html/hindi/java/editing-html-documents/_index.md @@ -47,13 +47,13 @@ url: /hi/java/editing-html-documents/ ### [Java के लिए Aspose.HTML में HTML दस्तावेज़ ट्री संपादित करें](./edit-html-document-tree/) जानें कि Java के लिए Aspose.HTML का उपयोग करके HTML दस्तावेज़ों में हेरफेर कैसे करें। कुशल सामग्री प्रबंधन के लिए चरण-दर-चरण मार्गदर्शिका। ### [Java के लिए Aspose.HTML में उन्नत HTML दस्तावेज़ ट्री संपादन](./advanced-html-document-tree-editing/) -इस चरण-दर-चरण मार्गदर्शिका के साथ Java के लिए Aspose.HTML का उपयोग करके HTML दस्तावेज़ों को संपादित करने का तरीका जानें, जिसमें शैलियाँ, पैराग्राफ़ बनाना और PDF में परिवर्तित करना शामिल है। +इस चरण-दर-चरण मार्गदर्शिका के साथ Java के लिए Aspose.HTML का उपयोग करके HTML दस्तावेज़ को संपादित करने का तरीका जानें, जिसमें शैलियाँ, पैराग्राफ़ बनाना और PDF में परिवर्तित करना शामिल है। ### [Java के लिए Aspose.HTML में HTML दस्तावेज़ों पर बाह्य CSS लागू करें](./apply-external-css-html-documents/) जानें कि Java के लिए Aspose.HTML का उपयोग करके HTML दस्तावेज़ों पर बाहरी CSS कैसे लागू करें! संपूर्ण ट्यूटोरियल के लिए इस चरण-दर-चरण मार्गदर्शिका का पालन करें। ### [Java के लिए Aspose.HTML के साथ उन्नत बाह्य CSS संपादन](./advanced-external-css-editing/) Aspose.HTML for Java के साथ बाहरी CSS को संपादित करने की कला में महारत हासिल करें। यह विस्तृत, चरण-दर-चरण मार्गदर्शिका आपको गतिशील, स्टाइल वाले HTML दस्तावेज़ बनाने में मार्गदर्शन करती है। ### [Java के लिए Aspose.HTML में HTML दस्तावेज़ों में इनलाइन CSS जोड़ें](./add-inline-css-html-documents/) -Java के लिए Aspose.HTML का उपयोग करके HTML दस्तावेज़ों में इनलाइन CSS जोड़ना सीखें। यह चरण-दर-चरण मार्गदर्शिका आपको HTML को स्टाइल करने और इसे आसानी से PDF में बदलने में मदद करती है। +Java के लिए Aspose.HTML का उपयोग करके HTML दस्तावेज़ों में इनलाइन CSS जोड़ना सीखें। यह चरण-दर-चरण मार्गदर्शन आपको HTML को स्टाइल करने और इसे आसानी से PDF में बदलने में मदद करती है। ### [Java के लिए Aspose.HTML में आंतरिक और बाहरी HTML गुण प्रबंधित करें](./manage-inner-outer-html-properties/) इस चरण-दर-चरण मार्गदर्शिका के साथ Java के लिए Aspose.HTML में आंतरिक और बाहरी HTML गुणों को प्रबंधित करना सीखें, जो वेब डेवलपर्स और सामग्री निर्माताओं के लिए एकदम सही है। ### [Java के लिए Aspose.HTML के साथ HTML दस्तावेज़ों में आंतरिक CSS लागू करें](./implement-internal-css-html-documents/) @@ -61,13 +61,16 @@ Java के लिए Aspose.HTML का उपयोग करके HTML द ### [Fixed thread pool java – ExecutorService के साथ समानांतर HTML सफाई](./fixed-thread-pool-java-parallel-html-cleaning-with-executors/) ExecutorService के साथ Fixed Thread Pool का उपयोग करके समानांतर रूप से HTML को साफ़ करने की प्रक्रिया सीखें। ### [Java के साथ नया HTML तत्व बनाएं – पूर्ण Aspose.HTML गाइड](./create-new-html-element-with-java-full-aspose-html-guide/) -Java के लिए Aspose.HTML का उपयोग करके नया HTML तत्व बनाने की पूरी प्रक्रिया सीखें। चरण-दर-चरण मार्गदर्शिका। +Java के लिए Aspose.HTML का उपयोग करके नया HTML तत्व बनाने की पूरी प्रक्रिया सीखें। चरण-दर-चरण मार्गदर्शन। ### [Java के साथ MHTML में h1 टेक्स्ट बदलें – पूर्ण चरण‑दर‑चरण गाइड](./change-h1-text-in-mhtml-with-java-full-step-by-step-guide/) Java का उपयोग करके MHTML फ़ाइल में h1 टैग का टेक्स्ट बदलने की पूरी चरण‑दर‑चरण प्रक्रिया सीखें। ### [Java में बॉडी में चाइल्ड जोड़ें – पूर्ण Aspose.HTML ट्यूटोरियल](./append-child-to-body-in-java-full-aspose-html-tutorial/) Java के लिए Aspose.HTML का उपयोग करके बॉडी में नया तत्व जोड़ने की पूरी चरण-दर-चरण गाइड। + +### [जावा के साथ जावास्क्रिप्ट का उपयोग करके बैकग्राउंड रंग बदलें](./how-to-change-background-color-javascript-using-java/) + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} diff --git a/html/hindi/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/hindi/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..b5a08d84a5 --- /dev/null +++ b/html/hindi/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,246 @@ +--- +category: general +date: 2026-09-29 +description: जावा का उपयोग करके HTML फ़ाइल में जावास्क्रिप्ट से बैकग्राउंड रंग बदलें। + जावा में HTML लोड करना, HTML में JS चलाना, और जावा से HTML को संशोधित करके नया पृष्ठ + बैकग्राउंड बनाना सीखें। +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: hi +lastmod: 2026-09-29 +og_description: जावा का उपयोग करके HTML पेज में जावास्क्रिप्ट से बैकग्राउंड रंग बदलें। + यह ट्यूटोरियल दिखाता है कि जावा में HTML कैसे लोड करें, HTML में JS कैसे चलाएँ, + और प्रोग्रामेटिक रूप से पेज का बैकग्राउंड कैसे सेट करें। +og_image_alt: Screenshot of Java code that changes the page background color +og_title: जावास्क्रिप्ट में बैकग्राउंड रंग बदलें Java के साथ – चरण‑दर‑चरण मार्गदर्शिका +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: जावा का उपयोग करके जावास्क्रिप्ट में बैकग्राउंड रंग कैसे बदलें +url: /hi/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# जावा का उपयोग करके बैकग्राउंड रंग जावास्क्रिप्ट कैसे बदलें + +यदि आपको किसी मौजूदा HTML फ़ाइल में **change background color javascript** बदलने की आवश्यकता है, तो आप इसे पूरी तरह से जावा से ब्राउज़र खोले बिना कर सकते हैं। यह ट्यूटोरियल दिखाता है कि कैसे **load html in java** किया जाए, एक छोटा JavaScript स्निपेट चलाया जाए, और फिर **modify html with java** करके पेज की पृष्ठभूमि को अपडेट किया जाए। + +समाधान ओपन‑सोर्स **HTMLUnit** लाइब्रेरी के साथ काम करता है, जो एक हेडलेस ब्राउज़र प्रदान करती है जो JavaScript को बिल्कुल उसी तरह मूल्यांकन कर सकता है जैसे वास्तविक ब्राउज़र करता है। इस गाइड के अंत तक आपके पास एक पुन: उपयोग योग्य मेथड होगा जो **sets page background** को किसी भी रंग में बदल सकता है। + +## Prerequisites + +| आप क्या चाहिए | क्यों महत्वपूर्ण है | +|---------------|-------------------| +| Java 8 या नया | HTMLUnit को कम से कम Java 8 की आवश्यकता होती है। | +| Maven या Gradle बिल्ड टूल | HTMLUnit निर्भरता को स्वचालित रूप से प्राप्त करने के लिए। | +| एक HTML फ़ाइल जिसे आप संपादित करना चाहते हैं (जैसे, `input.html`) | स्रोत दस्तावेज़ जिसे लोड किया जाएगा और बदला जाएगा। | + +अपने प्रोजेक्ट में HTMLUnit जोड़ें: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Pro tip:** HTMLUnit का नवीनतम स्थिर संस्करण उपयोग करें ताकि सबसे सटीक JavaScript इंजन प्राप्त हो सके। + +## बैकग्राउंड रंग जावास्क्रिप्ट बदलें – जावा में HTML लोड करें + +पहला चरण HTML दस्तावेज़ को एक `HTMLPage` ऑब्जेक्ट में लोड करना है। यह आपको DOM‑जैसा API और एक JavaScript निष्पादन संदर्भ देता है। + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Why this matters*: `WebClient` एक सैंडबॉक्स्ड वातावरण बनाता है जहाँ JavaScript चल सकता है, इसलिए आप **run js in html** को ठीक उसी तरह चला सकते हैं जैसे उपयोगकर्ता का ब्राउज़र करता है। + +## HTML में js चलाएँ ताकि पेज की पृष्ठभूमि सेट हो सके + +पेज लोड हो जाने के बाद, आप कोई भी JavaScript अभिव्यक्ति मूल्यांकित कर सकते हैं। नीचे दिया गया स्निपेट `` तत्व की `backgroundColor` शैली को बदलता है। + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Explanation*: +- `document.body.style.backgroundColor` पेज की पृष्ठभूमि के लिए मानक DOM प्रॉपर्टी है। +- `eval` को कॉल करके, हम **run js in html** बिना वास्तविक ब्राउज़र विंडो की आवश्यकता के कर सकते हैं। +- यह मेथड किसी भी रंग के लिए पुन: उपयोग योग्य है, जो **set page background** आवश्यकता को पूरा करता है। + +## जावा के साथ html संशोधित करें और परिणाम सहेजें + +स्क्रिप्ट चलने के बाद, DOM नई शैली को दर्शाता है। अब आप अपडेटेड HTML को डिस्क पर लिख सकते हैं। + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +सब कुछ मिलाकर आपको एक एकल, चलाने योग्य प्रोग्राम मिलता है: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### अपेक्षित आउटपुट + +प्रोग्राम चलाने पर यह प्रिंट करता है: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +`js_modified.html` को किसी भी ब्राउज़र में खोलने पर पेज हल्के नीले बैकग्राउंड के साथ दिखता है, जिससे यह पुष्टि होती है कि **change background color javascript** ऑपरेशन सफल रहा। + +## सामान्य विविधताएँ और किनारे के मामले + +| स्थिति | कैसे निपटें | +|--------|-------------| +| **विभिन्न रंग स्वरूप** | कोई भी CSS‑संगत मान पास करें (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`)। | +| **गायब `` टैग** | स्क्रिप्ट चुपचाप विफल हो जाएगी; आप पहले `page.getFirstByXPath("//body")` के साथ सुनिश्चित कर सकते हैं कि `` मौजूद है। | +| **बड़े HTML फ़ाइलें** | CSS अक्षम करें (`setCssEnabled(false)`) और केवल आवश्यक JavaScript फीचर सक्षम करें ताकि मेमोरी उपयोग कम हो। | +| **एकाधिक स्क्रिप्ट चलाना** | `changeBackground` को बार‑बार कॉल करें या एक यूटिलिटी मेथड बनाएं जो JavaScript कमांड की सूची स्वीकार करे। | + +## निष्कर्ष + +अब आप जानते हैं कि **change background color javascript** को जावा में HTML फ़ाइल लोड करके, **run js in html** करके, और **modify html with java** करके **set page background** को किसी भी रंग में कैसे सेट किया जाए। ऊपर दिया गया पूरा उदाहरण नवीनतम HTMLUnit लाइब्रेरी के साथ काम करता है और बड़े ऑटोमेशन पाइपलाइन में एकीकृत किया जा सकता है, जैसे बैच‑प्रोसेसिंग HTML रिपोर्ट या ईमेल टेम्पलेट तैयार करना। + +**Next steps** +- अन्य DOM मैनिपुलेशन (जैसे, तत्व जोड़ना, स्क्रिप्ट हटाना) का अन्वेषण करें। +- इस दृष्टिकोण को PDF रेंडरर के साथ मिलाकर स्टाइल किए गए पेजों के PDF बनाएं। +- यदि आपको पूर्ण ब्राउज़र फ़िडेलिटी चाहिए तो Selenium WebDriver जैसे अलग हेडलेस इंजन का उपयोग करने की कोशिश करें। + +कोडिंग का आनंद लें! + +## अगला क्या सीखें? + +निम्नलिखित ट्यूटोरियल्स उन विषयों को कवर करते हैं जो इस गाइड में प्रदर्शित तकनीकों पर आधारित हैं। प्रत्येक संसाधन में पूर्ण कार्यशील कोड उदाहरण और चरण‑दर‑चरण व्याख्याएँ शामिल हैं, जो आपको अतिरिक्त API फीचर में निपुण बनने और अपने प्रोजेक्ट में वैकल्पिक कार्यान्वयन दृष्टिकोणों का पता लगाने में मदद करेंगे। + +- [गणना किया गया स्टाइल Java – HTML से बैकग्राउंड रंग निकालें](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [HTML लोड करें, डिवाइस DPI सेट करें और बैकग्राउंड रंग पढ़ें](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [जावा में JavaScript से HTML जेनरेट करें – पूर्ण चरण‑दर‑चरण गाइड](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/java/configuring-environment/_index.md b/html/hongkong/java/configuring-environment/_index.md index 4518a3b34a..f65901b4f9 100644 --- a/html/hongkong/java/configuring-environment/_index.md +++ b/html/hongkong/java/configuring-environment/_index.md @@ -119,6 +119,8 @@ A: 沙盒會限制某些 API(例如 `window.open`),但一般的 DOM 操作 ### [建立 Aspose HTML 沙盒 – 完整 Java 指南](./create-aspose-html-sandbox-complete-java-guide/) +### [在 Aspose.HTML for Java 中設定自訂使用者代理和螢幕尺寸](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) + --- **最後更新:** 2025-12-03 diff --git a/html/hongkong/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/hongkong/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..5721ddd8cb --- /dev/null +++ b/html/hongkong/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,190 @@ +--- +category: general +date: 2026-09-29 +description: 在 Aspose.HTML for Java 中設定自訂使用者代理,並了解如何設定虛擬螢幕尺寸以獲得精確的 HTML 呈現。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: zh-hant +lastmod: 2026-09-29 +og_description: 在 Aspose.HTML for Java 中設定自訂使用者代理,並了解如何設定虛擬螢幕尺寸,以獲得精確的 HTML 呈現。 +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: 在 Aspose.HTML for Java 中設定自訂使用者代理與螢幕尺寸 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: 在 Aspose.HTML for Java 中設定自訂使用者代理與螢幕尺寸 +url: /zh-hant/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 在 Aspose.HTML for Java 中設定自訂使用者代理與螢幕尺寸 + +如果您在使用 Aspose.HTML for Java 轉換 HTML 時需要 **設定自訂使用者代理**,本教學將一步步說明如何操作。透過設定 sandbox,您亦可 **設定虛擬螢幕大小**,確保版面配置與真實瀏覽器視窗相符。 + +完成本教學後,您將得到一個完整、可執行的程式範例,能 **指定使用者代理**、**設定螢幕寬度** 以及 **設定螢幕高度**。不需要額外工具——只要 Aspose.HTML for Java 與 Java 8+ 執行環境即可。 + +## 您將學會 + +* 如何建立 `SandboxConfiguration` 以隔離渲染環境。 +* 如何 **設定自訂使用者代理** 以及其對響應式網頁的重要性。 +* 如何 **設定虛擬螢幕尺寸**(螢幕寬度與高度)以取得正確的版面配置。 +* 如何在 sandbox 中載入 HTML 檔案並儲存處理後的結果。 +* 常見陷阱與 sandbox 渲染的最佳實踐。 + +> **先決條件** – 您需要一份有效的 Aspose.HTML for Java 授權、Java 8 或更新版本,以及一個 IDE(IntelliJ IDEA、Eclipse 或 VS Code)。範例使用本機的 `input.html` 檔案,任何可存取的 URL 皆可使用。 + +![Sandbox 流程圖](sandbox-flow.png "在 Java 中設定自訂使用者代理的範例") + +## 步驟 1:建立 sandbox 設定(基礎) + +sandbox 能將渲染環境與主機 JVM 隔離,這在您想 **設定自訂使用者代理** 或變更視口大小時相當重要。 + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*為什麼需要這一步?* +`SandboxConfiguration` 包含所有渲染選項,包括 **螢幕尺寸** 與 **使用者代理** 字串。於載入文件前先行設定,可確保 HTML 引擎從第一個請求起就遵循這些設定。 + +## 步驟 2:設定螢幕尺寸以模擬真實裝置 + +響應式網站常會讀取 `window.innerWidth` 與 `window.innerHeight`。若要讓引擎認為自己在 1024 × 768 的螢幕上執行,只需要 **設定虛擬螢幕大小**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*此設定的重要性* – 若未 **設定螢幕尺寸**,渲染器可能預設為極小的視口,導致 CSS 媒體查詢套用行動版樣式。透過明確 **設定螢幕寬度** 與 **設定螢幕高度**,您即可掌控哪些 CSS 規則會被觸發。 + +## 步驟 3:指定自訂使用者代理字串 + +某些網頁會根據使用者代理標頭提供不同內容。要 **指定使用者代理**,只要在 sandbox 設定上設定即可: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*為什麼要使用自訂使用者代理?* +自訂字串可以繞過機器人偵測、觸發僅限桌面版的功能,或測試特定瀏覽器版本的行為。Aspose 引擎會在載入外部資源(CSS、圖片、腳本)時,將此值隨每個 HTTP 請求一起傳送。 + +## 步驟 4:在 sandbox 中載入 HTML 文件 + +現在 sandbox 已完成全部設定,接著載入 HTML 檔案。接受檔案路徑與 `SandboxConfiguration` 的建構子會自動套用我們先前定義的所有設定。 + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +若需從遠端 URL 載入,只要將檔案路徑改為 URL 字串——Aspose.HTML 仍會遵守 **設定自訂使用者代理** 與 **螢幕尺寸**。 + +## 步驟 5:儲存處理後的輸出 + +文件載入完成後,您可以以任何支援的格式儲存。此處我們寫入一個 sandbox 化的 HTML 檔案,讓其反映因自訂設定而產生的 DOM 變更。 + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +儲存的檔案仍保留相同的標記,但任何查詢 `navigator.userAgent` 或檢查 `window.innerWidth` 的腳本,現在都會看到您提供的值。 + +## 完整、可執行的範例 + +將所有步驟整合,即可得到一個可直接複製、貼上並執行的自包含程式。 + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### 預期輸出 + +執行程式後會產生 `sandboxed_output.html`。若在瀏覽器中開啟並於主控台檢查 `navigator.userAgent`,會看到 **AsposeHTML/1.0**。同樣地,`window.innerWidth` 會回傳 **1024**,證明 **設定螢幕尺寸** 已如預期生效。 + +## 常見問題與邊緣案例處理 + +| 問題 | 解答 | +|----------|--------| +| **如果頁面從不同網域載入額外資源,會怎樣?** | sandbox 會在每個請求中轉送 **自訂使用者代理**,但跨來源政策仍然適用。若需放寬限制,可使用 `sandboxConfig.setAllowCrossDomain(true)`。 | +| **可以在文件載入後再變更螢幕尺寸嗎?** | 不行。螢幕尺寸會在首次布局階段讀取。若要以不同尺寸渲染,必須建立新的 `SandboxConfiguration` 並重新載入文件。 | +| **需要呼叫 `document.close()` 嗎?** | `HTMLDocument` 實作 `AutoCloseable`。使用 try‑with‑resources 區塊可確保正確清理,但在簡單腳本中明確呼叫 `close()` 並非必要。 | +| **這與在 HTTP 客戶端設定使用者代理有何不同?** | 在 sandbox 上設定使用者代理會影響 **所有** 由 HTML 引擎發出的資源請求,而不僅是最初的 HTML 取得。這更貼近真實瀏覽器的行為。 | +| **sandbox 對不受信任的 HTML 安全嗎?** | 安全。sandbox 隔離檔案系統存取,並根據設定限制網路呼叫,降低惡意腳本影響主機 JVM 的風險。 | + +## 專業小技巧 + +* **重複使用設定** – 若需渲染多頁且視口相同,可建立單一 `SandboxConfiguration` 並重複使用,以減少物件建立開銷。 +* **使用日誌除錯** – 開啟 Aspose.HTML 日誌 (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) 可查看哪些資源是以自訂使用者代理取得的。 +* **結合 CSS 媒體查詢** – 調整 **設定螢幕寬度** 後,即可測試響應式設計在平板、手機或大型桌面上的表現,無需開啟實體瀏覽器。 + +## 結論 + +現在您已掌握在 Aspose.HTML for Java 渲染 HTML 時 **設定自訂使用者代理** 與 **設定螢幕尺寸** 的方法。透過 sandbox,您可以隔離環境、控制視口,並確保外部資源收到您指定的標頭。此技巧對於測試響應式版面、繞過機器人封鎖,或在自動化流程中重現桌面專屬功能皆相當重要。 + +接下來,您可以探索 **設定自訂 Cookie** 或 **捕捉渲染截圖** 的方式——這兩項功能同樣是以相同的 sandbox 設定模式為基礎。 + +祝開發順利! + + +## 接下來該學什麼? + +以下教學與本篇內容緊密相關,皆以相同的技巧為基礎,提供完整可執行的程式碼範例與逐步說明,協助您掌握更多 API 功能或探索其他實作方式。 + +- [High DPI Rendering in Java – Capture Webpage Screenshots with Custom User Agent](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Create HTML File Java & Set Up Network Service (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/java/creating-managing-html-documents/_index.md b/html/hongkong/java/creating-managing-html-documents/_index.md index aa8319edd1..5336129bff 100644 --- a/html/hongkong/java/creating-managing-html-documents/_index.md +++ b/html/hongkong/java/creating-managing-html-documents/_index.md @@ -33,6 +33,8 @@ Aspose.HTML for Java 為旨在在 Java 應用程式中無縫處理 HTML 文件 想像一下,您需要根據使用者輸入或從 Web 檢索的資料動態產生 HTML 內容。這就是從字串建立 HTML 文件或直接從 URL 載入它們變得非常有價值的地方。 Aspose.HTML for Java 允許您使用原始 HTML 字串無縫建立 HTML 文件或從任何網址載入它們。這些教學課程為您提供了動態產生和操作 Web 內容的工具,讓您的 Java 應用程式更加靈活且反應迅速。[閱讀更多](./create-html-documents-from-string/) +### [如何在 Java 中使用 Aspose.HTML 建立 HTML 元素](./how-to-create-html-element-in-java-using-aspose-html/) + ## 產生新的 HTML 文件並處理高級文件加載 在產生新的 HTML 文件時,Aspose.HTML for Java 提供了強大的解決方案,讓您能夠從頭開始建立豐富的 Web 內容。無論您是在開發內容管理系統還是需要產生 HTML 格式的報告,了解如何建立和管理新的 HTML 文件都至關重要。此外,先進的文件載入技術可讓您處理複雜的 HTML 文檔,確保您可以輕鬆處理大型專案。這些教學將引導您完成每一步,確保您有能力應對任何與 HTML 相關的挑戰。[閱讀更多](./generate-new-html-documents/) @@ -74,6 +76,10 @@ Aspose.HTML for Java 為旨在在 Java 應用程式中無縫處理 HTML 文件 了解如何使用 Aspose.HTML for Java 計算 HTML 文檔中的字元數,提供完整步驟與範例。 ### [在 Java 中從 HTML 提取文字 – 完整程式設計指南](./extract-text-from-html-in-java-complete-programming-guide/) 使用 Aspose.HTML for Java 從 HTML 中提取文字的完整步驟指南,涵蓋示例與最佳實踐。 +### [如何在 Java 中使用 querySelectorAll 按類別選取元素](./how-to-select-elements-by-class-in-java-using-queryselectora/) + +### [如何使用 XPath 在 Java 中計算 HTML 元素](./how-to-count-html-elements-in-java-with-xpath/) +使用 Aspose.HTML for Java 透過 XPath 計算 HTML 元素數量的完整步驟指南。 {{< /blocks/products/pf/tutorial-page-section >}} @@ -113,5 +119,4 @@ Aspose.HTML for Java 為旨在在 Java 應用程式中無縫處理 HTML 文件 {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} - +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/hongkong/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..3e95e519e7 --- /dev/null +++ b/html/hongkong/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,208 @@ +--- +category: general +date: 2026-09-29 +description: 學習如何在 Java 中使用 Aspose.HTML 與 XPath 計算 HTML 元素的數量。本指南示範如何載入 HTML 文件、使用 + XPath 選取節點,以及取得節點清單。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: zh-hant +lastmod: 2026-09-29 +og_description: 如何在 Java 中使用 Aspose.HTML 計算 HTML 元素。請跟隨本完整教學,載入 HTML 文件、使用 XPath 選取節點、在 + Java 中評估 XPath,並取得節點清單。 +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: 如何在 Java 中計算 HTML 元素 – 逐步指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: 如何在 Java 中使用 XPath 計算 HTML 元素 +url: /zh-hant/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 XPath 計算 HTML 元素 + +如果你需要在 Java 應用程式中 **計算 HTML 元素**,本指南提供完整、即時可執行的解決方案。閱讀前兩句後,你將清楚知道如何載入 HTML 文件、使用 XPath 選取節點,以及取得可供計數的節點清單。 + +我們將使用 Aspose.HTML for Java 函式庫,因為它提供相容 DOM 的 API 以及強大的 XPath 引擎。此教學涵蓋所有必要內容——匯入、程式碼、說明與預期輸出——讓你可以直接將範例複製到專案中即時看到結果。過程中亦會提及 **select nodes with XPath**、**get node list Java**、**load HTML document Java** 與 **evaluate XPath in Java**。 + +## 你將達成的目標 + +* 從檔案系統載入 HTML 檔案。 +* 建立針對特定元素的 XPath 表達式。 +* 對文件評估 XPath 表達式。 +* 取得 `NodeList` 並計算匹配的元素數量。 + +不需要任何外部服務或複雜設定;只要在 classpath 中加入 Aspose.HTML JAR 即可。 + +--- + +## 如何在 Java 中使用 XPath 計算 HTML 元素 + +本分步說明展示了所需的完整程式碼。每個小節對應流程中的一個邏輯部分,讓你輕鬆調整或擴充。 + +### 步驟 1:在 Java 中載入 HTML 文件 + +首先,將 HTML 檔案載入記憶體。`HTMLDocument` 類別會解析檔案並建立可供 XPath 查詢的 DOM 樹。 + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**為何重要:** +載入文件會建立 DOM 表示,這是任何 XPath 評估的前提。若檔案路徑錯誤,Aspose.HTML 會拋出 `FileNotFoundException`,因此請再次確認 `input.html` 的位置。 + +### 步驟 2:建立並評估 XPath 表達式 + +現在我們建立一個 XPath 來選取要計數的元素。在此範例中,我們計算所有 `alt` 屬性等於 "logo" 的 `` 標籤。 + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**為何重要:** +表達式 `//img[@alt='logo']` 是 **select nodes with XPath** 的簡潔寫法。`evaluate` 呼叫 **evaluate XPath in Java** 並回傳通用的 `XPathResult`。將其轉型為 `NodeList` 後,我們即可直接存取匹配的節點集合。 + +### 步驟 3:取得並計算節點清單 + +最後,我們計算回傳的節點數量。`NodeList` API 提供 `getLength()` 以完成此操作。 + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**為何重要:** +`getLength()` 是 **get node list Java** 並取得計數的最簡方式。若 XPath 未匹配任何元素,長度將為 `0`,你的應用程式可自行優雅處理。 + +### 完整可執行範例 + +以下為完整程式碼,包含所有匯入與最小化的 `main` 方法。將其複製到名為 `CountHtmlElements.java` 的檔案中,於專案加入 Aspose.HTML JAR 後執行。 + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**預期輸出** + +若 `input.html` 包含三個 `logo` 標籤,程式會輸出: + +``` +Found 3 logo images. +``` + +若不存在此類圖片,則會輸出: + +``` +Found 0 logo images. +``` + +--- + +## 常見變體與邊緣情況 + +| 情況 | 需要變更的地方 | 原因 | +|-----------|----------------|--------| +| 計算不同的元素(例如具有 class `header` 的 `
`) | 將 XPath 改為 `//div[@class='header']` | XPath 語法允許你針對任意標籤或屬性。 | +| 計算所有元素,不論屬性 | 使用 `//*` 作為 XPath 表達式 | `//*` 會選取文件中所有的元素節點。 | +| 大型文件導致記憶體壓力 | 使用串流解析器或在片段上評估 XPath | Aspose.HTML 提供 `HTMLDocumentFragment` 以進行部分解析。 | +| 需要實際的節點,而非僅計數 | 迭代 `nodes.item(i)` | 計數後你可以處理每個節點。 | + +**專業提示:** 在傳入 `createXPathExpression` 前務必驗證 XPath 字串。無效的表達式會拋出 `XPathException`,你可以捕捉它並提供友善的錯誤訊息。 + +## 疑難排解清單 + +1. **Library not found** – 確認 Aspose.HTML for Java JAR 已加入 classpath(`-cp` 或 IDE 的相依性)。 +2. **File not found** – 檢查 `input.html` 是否位於工作目錄的相對路徑,或改用絕對路徑。 +3. **Zero results** – 再次確認屬性值與大小寫是否正確(`alt='logo'` 與 `alt='Logo'`)。XPath 對大小寫敏感。 +4. **Performance concerns** – 若需對同一檔案執行多次 XPath 查詢,請重複使用同一個 `HTMLDocument` 實例。 + +## 結論 + +現在你已掌握使用 Aspose.HTML 與 XPath 在 Java 中 **計算 HTML 元素** 的方法。透過載入 HTML 文件、建立 XPath 表達式、**evaluate XPath in Java**,以及取得 **node list**,即可快速得知匹配元素的數量。此技巧適用於任何標籤或屬性,是網頁爬蟲、自動化測試或內容分析的多功能工具。 + +接下來你可以探索的步驟包括: + +* 使用 **select nodes with XPath** 來擷取屬性值(例如圖片的 `src`)。 +* 結合多個 XPath 查詢以建立元素統計報告。 +* 將此邏輯整合至更大的 Java 服務,以批次處理 HTML 檔案。 + +## 接下來該學什麼? + +以下教學涵蓋與本指南緊密相關的主題,並在此基礎上延伸。每篇資源皆提供完整可執行的程式碼範例與逐步說明,協助你精通更多 API 功能,並在專案中探索其他實作方式。 + +- [如何在 Java 中解析 HTML – 載入、查詢與計算元素](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [如何在 Java 中查詢 HTML – 選取元素、依屬性過濾並取得文字](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [載入 HTML 文件 Java – 完整指南(含 XPath 與 CSS)](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/hongkong/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..3bf7699cec --- /dev/null +++ b/html/hongkong/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,183 @@ +--- +category: general +date: 2026-09-29 +description: 學習如何在 Java 中建立 HTML 元素,新增段落,設定其文字,並使用 Aspose.HTML 將其附加至 body。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: zh-hant +lastmod: 2026-09-29 +og_description: 使用 Aspose.HTML 在 Java 中建立 HTML 元素:新增段落、設定文字,並將其加入 body。 +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: 在 Java 中建立 HTML 元素 – 一步一步的 Aspose.HTML 指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: 如何在 Java 中使用 Aspose.HTML 創建 HTML 元素 +url: /zh-hant/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 Aspose.HTML 建立 HTML 元素 + +如果您需要在 Java 應用程式中 **create HTML element**,本指南將為您展示一個完整且可執行的解決方案。您將看到如何 **add a paragraph**、設定其文字,並 **append the element to the body** 於現有的 HTML 檔案中,使用 Aspose.HTML。 + +本教學涵蓋從載入文件到儲存修改後檔案的全部步驟,讓您可以直接將程式碼複製到自己的專案中,無需額外研究。 + +## 前置條件 + +在開始之前,請確保您已具備: + +* 已安裝 Java 17 或更新版本。 +* 已將 Aspose.HTML for Java 23.10(或最新版本)加入專案的 classpath。 +* 在已知目錄中放置一個簡單的 `input.html` 檔案。該檔案可以是空的(``)或已包含現有的標記。 + +## 步驟 1:載入現有的 HTML 文件 + +載入來源檔案會為您提供可操作的 DOM 樹。 + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +`HTMLDocument` 建構子會解析檔案並建立即時的 DOM。若檔案無法讀取,Aspose.HTML 會拋出 `IOException`;您可以讓例外傳遞,或使用 try‑catch 區塊處理它。 + +## 步驟 2:建立新的 `

` 元素並將文字加入 HTML + +建立新元素的方式類似於在瀏覽器中使用 `document.createElement`。 + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` 會自動建立文字節點並附加到元素上,這是 **add text to HTML** 的建議做法。此方法同時會轉義可能破壞標記的字元。 + +## 步驟 3:將元素附加至 body + +現在段落已準備好,您需要將它放入文件的 `` 中。 + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` 會回傳 `` 節點,而 `appendChild` 則將新的 `

` 插入為最後一個子節點。若文件沒有 `` 元素(對於結構良好的 HTML 檔案而言不太可能),Aspose.HTML 會自動建立一個。 + +## 步驟 4:儲存已修改的文件 + +最後,將更新後的 DOM 寫回磁碟。 + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` 會序列化 DOM,保留既有標記並加入新的段落。產生的 `output.html` 會包含以下內容: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## 完整原始碼(java html 範例) + +將所有步驟整合在一起,即可得到一個可立即執行的獨立程式。 + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### 程式碼說明 + +| 步驟 | 操作 | 為何重要 | +|------|--------|----------------| +| Load document | `new HTMLDocument(...)` | 解析來源 HTML 成為可操作的 DOM。 | +| Create element | `doc.createElement("p")` | 鏡像瀏覽器 API,確保元素符合 HTML 標準。 | +| Set text | `setTextContent(...)` | 保證正確轉義,避免手動建立文字節點。 | +| Append to body | `doc.getBody().appendChild(...)` | 將新元素放置於瀏覽器會渲染的位置。 | +| Save file | `doc.save(...)` | 持久化變更,產生可供後續使用的有效 HTML 檔案。 | + +## 常見變形與邊緣情況 + +* **Adding multiple elements** – 在呼叫 `save` 之前,對每個新節點重複步驟 2‑3。 +* **Inserting before a specific node** – 使用 `insertBefore(newNode, referenceNode)` 取代 `appendChild`。 +* **Working with fragments** – `doc.createDocumentFragment()` 讓您一次建立多個節點並在單一操作中附加,對大型更新可提升效能。 +* **Handling UTF‑8 characters** – Aspose.HTML 會自動以 UTF‑8 寫入;只需確保來源檔案的編碼相同即可。 + +## 實用技巧 + +* **Path handling** – 使用 `java.nio.file.Paths` 來建立跨平台的檔案路徑。 +* **Exception safety** – 若需關閉其他串流,可將整段程式碼包在 try‑with‑resources 陳述式中。 +* **Performance** – 對於非常大的 HTML 檔案,可考慮使用 `HTMLDocument(String, LoadOptions)` 載入文件,並在其中停用外部資源以加速解析。 + +## 驗證結果 + +執行程式後,於任意瀏覽器開啟 `output.html`。您應該會看到段落「Added by Aspose.HTML」出現在原始 body 結尾處。檢查頁面原始碼以確認 `

` 元素已存在於 `` 內。 + +## 結論 + +您現在已了解如何在 Java 中使用 Aspose.HTML **create HTML element**、**add a paragraph**、**add text to HTML**,以及 **append element to body**。完整的 **java html example** 展示了一個乾淨且可投入生產環境的工作流程,您可以將其擴展以操作 HTML 文件的任何部分。 + +接下來,您可以探索相關主題,如 **modifying attributes**、**removing nodes** 或 **working with CSS styles**,以建立更完整的 HTML 處理管線。祝開發愉快! + +## 接下來該學什麼? + +以下教學涵蓋與本指南緊密相關的主題,並以此為基礎。每個資源皆提供完整可執行的程式碼範例與逐步說明,協助您精通更多 API 功能,並在自己的專案中探索替代實作方式。 + +- [使用 Java 建立新 HTML 元素 – 完整 Aspose.HTML 指南](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [在 Java 中將子節點附加至 body – 完整 Aspose.HTML 教程](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [使用 DOM Mutation Observer 於 Aspose.HTML for Java 將元素附加至 Body](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/hongkong/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..f6ffe2cc96 --- /dev/null +++ b/html/hongkong/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,252 @@ +--- +category: general +date: 2026-09-29 +description: 學習如何按類別選取元素、從檔案讀取 HTML,並在 Java 中找出外部連結。此逐步指南涵蓋高效遍歷 NodeList。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: zh-hant +lastmod: 2026-09-29 +og_description: 在 Java 中按類別選取元素,從檔案讀取 HTML,並使用 querySelectorAll 找出外部連結。請參考完整範例以遍歷 + NodeList。 +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: 在 Java 中按類別選取元素 – 使用 querySelectorAll 完整指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: 如何在 Java 中使用 querySelectorAll 依類別選取元素 +url: /zh-hant/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 querySelectorAll 按類別選取元素 + +如果您需要在 Java 中處理 HTML 檔案時 **按類別選取元素**,本指南將完整說明操作步驟。您將學會從檔案讀取 HTML、使用 `querySelectorAll` 找出外部連結,並安全地遍歷產生的 `NodeList`。 + +在 Java 中操作 HTML 往往感覺笨重,但現代函式庫提供簡潔、基於 CSS 選擇器的 API。以下範例使用 **jsoup**(版本 1.17.2),因為它實作了 `querySelectorAll` 風格的選擇器,並回傳可類比 `NodeList` 的 `Elements` 集合。若有需要,也可以將相同邏輯套用到其他 DOM 實作上。 + +## 前置條件 + +在開始之前,請確保您已具備: + +* JDK 17 或更新版本。 +* Maven 或 Gradle 以管理相依性。 +* 基本的 Java Stream 與 DOM 模型概念。 + +將 jsoup 加入您的專案: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## 步驟 1:從檔案讀取 HTML + +第一件事是從磁碟載入 HTML 文件。`Jsoup.parse(Path, Charset)` 會讀取檔案並建立可供查詢的 DOM 樹。 + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*為什麼這很重要*:只讀取一次檔案即可避免在之後遍歷元素時重複 I/O。`Document` 物件保存完整的 DOM,讓選擇器查詢速度更快。 + +## 步驟 2:使用 `querySelectorAll` 按類別選取元素 + +文件已載入記憶體後,您可以使用 CSS 選擇器 **按類別選取元素**。選擇器 `"a.external"` 會匹配帶有 `external` 類別的 `` 標籤——正是您要 **找出外部連結** 的方式。 + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*為什麼這很重要*:類別選擇器既表意又效能佳。函式庫會將選擇器轉譯為最佳化的遍歷程式碼,您不必自行寫迴圈遍歷每個節點。 + +## 步驟 3:在 Java 中遍歷 NodeList(Elements) + +`Elements` 實作了 `Iterable`,因此您可以使用標準的 **for‑each** 迴圈遍歷 **NodeList Java** 物件。以下程式會印出每個連結的 `href` 屬性。 + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*為什麼這很重要*:直接迭代讓程式碼易讀,且在只需要簡單輸出時,避免將集合轉成 Stream 所產生的額外開銷。 + +## 完整範例 + +將上述三個步驟整合,即可得到一個可直接從命令列執行的自包含程式。 + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### 預期輸出 + +假設 `input.html` 內容如下: + +```html +Example +About +OpenAI +``` + +執行程式後會印出: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## 專業提示與常見陷阱 + +* **編碼很重要** – 請務必使用 UTF‑8(或與來源相符的字元集)讀取檔案。編碼錯誤會導致屬性值的字元毀損。 +* **多重類別** – 若元素同時擁有多個類別(例如 `class="btn external"`),選擇器 `"a.external"` 仍會匹配,因為 CSS 類別選擇器只檢查 token 是否存在,而非完整字串。 +* **效能小技巧** – 若只需要 `href` 屬性,可直接使用 `doc.select("a.external[href]").eachAttr("href")` 取得,這樣可避免為每筆匹配建立完整的 `Element` 物件。 +* **空值安全** – `link.attr("href")` 若屬性不存在會回傳空字串,因而在列印前不必額外做 null 檢查。 + +## 常見問答 + +**Q: 這個方法能處理沒有 `` 根元素的 HTML 片段嗎?** +A: 能。`Jsoup.parse` 會將輸入視為片段,並自動補上缺失的根元素,使選擇器能在片段的 body 上正常運作。 + +**Q: 可以不使用 jsoup 而使用 `querySelectorAll` 嗎?** +A: 標準的 Java DOM API(`org.w3c.dom`)並未提供 `querySelectorAll`。**HTMLUnit** 或 **jodd-lagarto** 等函式庫提供類似方法。此處示範的「載入 → CSS 選擇 → 迭代」模式在其他函式庫中仍然適用。 + +**Q: 如果我要修改連結而不是僅列印,該怎麼做?** +A: 取得每個 `Element` 後,可呼叫 `link.attr("href", "newUrl")` 變更屬性,最後使用 `Files.writeString` 將文件寫回磁碟。 + +## 結論 + +您現在已掌握如何 **按類別選取元素**、**從檔案讀取 HTML**、**找出外部連結**,以及 **在 Java 中遍歷 NodeList**,全部透過 `querySelectorAll`‑風格的選擇器完成。完整範例展示了乾淨、可投入生產環境的工作流程,您可以將其嵌入更大型的爬蟲或轉換管線中。 + +接下來,您可以探索以下相關主題,例如 **使用 HTMLUnit 解析動態內容**、**將修改後的 HTML 寫回檔案**,或 **使用 Java Stream 收集連結 URL 成 List**。這些主題皆建立在本指南所示的類別選擇核心技巧之上。祝您寫程式愉快! + +## 接下來您可以學習什麼? + +以下教學與本指南所示技巧緊密相關,提供完整的程式碼範例與逐步說明,協助您精通更多 API 功能並在專案中嘗試不同實作方式。 + +- [如何在 Java 中查詢 HTML – 選取元素、依屬性篩選並取得文字](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [遍歷 NodeList Java – 讀取 HTML 並取得 Image src](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [在 Aspose.HTML for Java 中從檔案載入 HTML 文件](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/java/css-html-form-editing/_index.md b/html/hongkong/java/css-html-form-editing/_index.md index 1833ac1564..91e89c9907 100644 --- a/html/hongkong/java/css-html-form-editing/_index.md +++ b/html/hongkong/java/css-html-form-editing/_index.md @@ -37,6 +37,8 @@ url: /zh-hant/java/css-html-form-editing/ 本指南說明如何在 Java 中使用 Aspose.HTML 按類別選取元素,涵蓋完整步驟與範例。 ### [如何在 Java 中讀取 CSS – Aspose.HTML 完整指南](./how-to-read-css-in-java-complete-guide-with-aspose-html/) 本完整指南說明如何使用 Aspose.HTML 在 Java 中讀取與解析 CSS 檔案,涵蓋實作步驟與範例。 +### [如何使用 Aspose.HTML for Java 從 HTML 讀取 CSS](./how-to-read-css-from-html-with-aspose-html-in-java/) +本教程說明如何使用 Aspose.HTML for Java 從 HTML 文件中讀取 CSS,涵蓋步驟與範例。 ### [使用 Java 解析 HTML:提取 CSS 屬性並獲取字體大小](./parse-html-with-java-extract-css-property-and-get-font-size/) 本教程說明如何使用 Aspose.HTML for Java 解析 HTML,提取特定 CSS 屬性並取得字體大小。 ### [如何在 Java 中查詢 HTML – 載入 HTML、CSS 選擇器,並提取標題](./how-to-query-html-in-java-load-html-css-selector-and-extract/) diff --git a/html/hongkong/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/hongkong/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..d2f40b5df2 --- /dev/null +++ b/html/hongkong/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,275 @@ +--- +category: general +date: 2026-09-29 +description: 如何使用 Aspose.HTML for Java 從 HTML 讀取 CSS。學習如何透過 ID 選取元素、取得計算樣式、擷取 CSS + 屬性,並顯示背景顏色。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: zh-hant +lastmod: 2026-09-29 +og_description: 如何使用 Aspose.HTML for Java 從 HTML 讀取 CSS。逐步說明如何依 ID 選取元素、取得計算樣式、提取 + CSS,並顯示背景顏色。 +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: 如何使用 Aspose.HTML 從 HTML 中讀取 CSS – Java 指南 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: 如何在 Java 中使用 Aspose.HTML 從 HTML 讀取 CSS +url: /zh-hant/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何在 Java 中使用 Aspose.HTML 從 HTML 讀取 CSS + +如果你需要在 Java 應用程式中 **how to read css** 從 HTML 檔案讀取 CSS,本指南會精確說明步驟。閱讀完前兩句後,你將了解如何以 id 選取元素、取得計算後的樣式,並顯示背景顏色——全部使用 Aspose.HTML。 + +我們將示範如何載入 HTML 文件、定位特定元素、擷取其計算後的 CSS,並印出 background‑color 的值。除了 Aspose.HTML for Java 函式庫外,無需其他外部工具,且程式碼相容於 Java 8+。 + +## 你將學會 + +* 如何使用 Aspose.HTML 從 HTML 文件讀取 CSS。 +* 如何使用 `querySelector` **select element by id**。 +* 如何 **get computed style** 任意 DOM 節點。 +* 如何 **extract CSS from HTML** 並讀取個別屬性,例如 **display background color**。 +* 常見陷阱與可靠 CSS 擷取的最佳實踐技巧。 + +### 前置條件 + +* 已安裝 Java 8 或更新版本。 +* 使用 Maven 或 Gradle 管理 Aspose.HTML 相依性。 +* 一個簡單的 HTML 檔案(例如 `input.html`),其中包含你想檢查的帶有 `id` 屬性的元素。 + +--- + +## 第一步:載入 HTML 文件(how to read css) + +在任何 CSS 讀取工作流程的第一步是載入來源 HTML。Aspose.HTML 提供 `HTMLDocument` 類別,可解析檔案並建立可供查詢的 DOM。 + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**為什麼這很重要:** 載入文件會建立完整的 DOM,讓樣式計算與瀏覽器產生的結果保持一致。若跳過此步,將只能取得原始文字,無法得到結構化的文件。 + +--- + +## 第二步:以 id 選取元素 + +要為特定節點擷取 CSS,首先必須取得該節點的參考。`querySelector` 方法接受任何 CSS 選擇器,非常適合用於以 ID 選取。 + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**為什麼使用 `querySelector`?**:它遵循與 CSS 相同的選擇器語法,讓你可以直接使用熟悉的模式,如 `#myDiv`、`.className` 或屬性選擇器,無需額外的解析邏輯。 + +--- + +## 第三步:取得元素的計算樣式 + +取得元素後,Aspose.HTML 能計算 **computed style**——即所有 CSS 規則、繼承與預設值套用後的最終值。 + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**為什麼要計算樣式?**:計算樣式反映瀏覽器實際渲染的值,而不只是原始宣告。這在你需要知道實際的 `background-color`、`font-size` 或其他屬性時尤為重要。 + +--- + +## 第四步:擷取 CSS 屬性並顯示背景顏色 + +現在你已擁有 `StyleDeclaration`,可以讀取任意 CSS 屬性。本例聚焦於 **display background color**,但相同方法亦適用於 `font-size`、`margin` 等。 + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**預期輸出** + +``` +Background color: rgb(255, 0, 0) +``` + +如果元素的背景顏色是從父層或樣式表繼承而來,計算值已包含該繼承結果。 + +--- + +## 處理例外情況與變化 + +### 元素未找到 +如果 `querySelector` 回傳 `null`,上述程式碼已會印出錯誤訊息並退出。正式環境中,你可能需要拋出自訂例外或回退至預設元素。 + +### 多個相同 ID 的元素(HTML 無效) +雖然 ID 應唯一,但錯誤的 HTML 可能出現重複。`querySelector` 只會回傳第一個匹配項。若要處理全部匹配項,可使用 `querySelectorAll` 並遍歷返回的 `NodeList`。 + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### 不同的 CSS 屬性 +若要 **extract css from html** 超出背景顏色的其他屬性,只需在 `StyleDeclaration` 上呼叫相應的 getter。常用的 getter 包含: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +如果某屬性未明確設定,getter 會回傳計算後的預設值(例如 `
` 的 `display: block`)。 + +### 瀏覽器特定前綴 +Aspose.HTML 會在可能的情況下將廠商前綴屬性(如 `-webkit-transform`)正規化為標準等價物。若需取得原始值,可直接查詢 `StyleDeclaration` 的 map: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +--- + +## 完整可執行範例 + +以下是一個自包含的 Java 類別,將所有步驟串接起來。請將 `YOUR_DIRECTORY/input.html` 替換為你的 HTML 檔案路徑。 + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**執行程式** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +執行後,你應該會在主控台看到背景顏色的輸出,證明已成功 **how to read css**、**select element by id**、**get computed style**,以及 **display background color**。 + +--- + +## 最佳實踐技巧(專業提示) + +* **Cache the `HTMLDocument`** 若需從多個元素讀取 CSS,請快取文件;重複解析檔案會影響效能。 +* **Validate the HTML** 載入前先驗證 HTML——格式錯誤的標記可能導致節點遺失或計算值不正確。 +* **Use try‑with‑resources**(或明確呼叫 `dispose`)以釋放 Aspose.HTML 物件佔用的原生資源。 +* **Log the full `StyleDeclaration`** 在除錯複雜樣式時,使用 `System.out.println(computedStyle.getCssText());` 可取得所有計算屬性的快照。 + +--- + +## 結論 + +你現在已掌握如何在 Java 中使用 Aspose.HTML **how to read CSS** 從 HTML 檔案讀取。透過載入文件、**selecting element by id**、**getting computed style**,以及**extracting the background‑color** 屬性,你可以以程式方式檢查瀏覽器會套用的任何樣式資訊。 + +接下來,你可以將此解決方案擴展至擷取其他 CSS 屬性、處理多個元素,或將資料整合至 UI 測試框架中。 + +祝開發順利,歡迎自行嘗試不同的選擇器與樣式屬性,以符合專案需求! + +## 接下來該學什麼? + +以下教學與本指南所示技術密切相關,提供完整的程式碼範例與逐步說明,協助你掌握更多 API 功能並探索替代實作方式。 + +- [How to Get CSS in Java – Retrieve Computed Style with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [how to read css in Java – Complete Guide with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hongkong/java/editing-html-documents/_index.md b/html/hongkong/java/editing-html-documents/_index.md index 6426971962..904ba73bd2 100644 --- a/html/hongkong/java/editing-html-documents/_index.md +++ b/html/hongkong/java/editing-html-documents/_index.md @@ -60,6 +60,8 @@ url: /zh-hant/java/editing-html-documents/ 透過我們簡單的逐步教程,學習使用 Aspose.HTML for Java 在 HTML 文件中實現內部 CSS。 ### [使用 Java 在 MHTML 中更改 h1 文本 – 完整步驟指南](./change-h1-text-in-mhtml-with-java-full-step-by-step-guide/) 本指南逐步說明如何使用 Aspose.HTML for Java 在 MHTML 文件中修改 h1 標題文字。 +### [使用 Java 更改 JavaScript 背景顏色](./how-to-change-background-color-javascript-using-java/) +本指南說明如何使用 Aspose.HTML for Java 透過 Java 程式碼更改 JavaScript 背景顏色。 ### [使用 Java 建立新 HTML 元素 – 完整 Aspose.HTML 指南](./create-new-html-element-with-java-full-aspose-html-guide/) 了解如何使用 Aspose.HTML for Java 在 HTML 文件中建立新元素,並將其轉換為 PDF 的完整步驟指南。 ### [固定執行緒池 Java – 使用 ExecutorService 進行平行 HTML 清理](./fixed-thread-pool-java-parallel-html-cleaning-with-executors/) diff --git a/html/hongkong/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/hongkong/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..5c50edc1ed --- /dev/null +++ b/html/hongkong/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,245 @@ +--- +category: general +date: 2026-09-29 +description: 使用 Java 在 HTML 檔案中以 JavaScript 更改背景顏色。學習如何在 Java 中載入 HTML、在 HTML 中執行 + JS,並透過 Java 修改 HTML 以設定新頁面的背景。 +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: zh-hant +lastmod: 2026-09-29 +og_description: 使用 Java 在 HTML 頁面中變更背景顏色(JavaScript)。本教學示範如何在 Java 中載入 HTML、在 HTML + 中執行 JavaScript,並以程式方式設定頁面背景。 +og_image_alt: Screenshot of Java code that changes the page background color +og_title: 使用 Java 透過 JavaScript 更改背景顏色 – 一步一步教學 +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: 如何使用 Java 透過 JavaScript 更改背景顏色 +url: /zh-hant/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# 如何使用 Java 更改背景顏色(javascript) + +如果您需要在現有的 HTML 檔案中 **更改背景顏色(javascript)**,可以完全在 Java 中完成,無需開啟瀏覽器。本教學將示範如何 **在 Java 中載入 html**、執行一小段 JavaScript 程式碼,然後 **使用 java 修改 html**,使頁面的背景顏色得以更新。 + +此解決方案使用開源的 **HTMLUnit** 函式庫,提供一個無頭瀏覽器,能夠像真實瀏覽器一樣評估 JavaScript。完成本指南後,您將擁有一個可重複使用的方法,**設定頁面背景** 為任意您想要的顏色。 + +## 前置條件 + +| 您需要的項目 | 為什麼重要 | +|---------------|------------| +| Java 8 或更新版本 | HTMLUnit 至少需要 Java 8。 | +| Maven 或 Gradle 建置工具 | 讓您自動下載 HTMLUnit 相依套件。 | +| 您想要編輯的 HTML 檔案(例如 `input.html`) | 需要載入並修改的來源文件。 | + +將 HTMLUnit 加入您的專案: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **小技巧:** 使用最新的穩定版 HTMLUnit,以取得最精確的 JavaScript 引擎。 + +## 更改背景顏色(javascript) – 在 Java 中載入 HTML + +第一步是將 HTML 文件載入到 `HTMLPage` 物件中。這樣您就能取得類似 DOM 的 API 以及 JavaScript 執行環境。 + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*為什麼重要*:`WebClient` 會建立一個沙盒環境,讓 JavaScript 能夠執行,您可以 **在 html 中執行 js**,效果與使用者的瀏覽器相同。 + +## 在 html 中執行 js 以設定頁面背景 + +頁面載入後,您可以評估任意 JavaScript 表達式。以下程式碼會變更 `` 元素的 `backgroundColor` 樣式。 + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*說明*: +- `document.body.style.backgroundColor` 是頁面背景的標準 DOM 屬性。 +- 透過呼叫 `eval`,我們 **在 html 中執行 js**,不需要真實的瀏覽器視窗。 +- 此方法可重複使用於任何顏色,滿足 **設定頁面背景** 的需求。 + +## 使用 java 修改 html 並儲存結果 + +腳本執行完畢後,DOM 已反映新的樣式。現在可以將更新後的 HTML 寫回磁碟。 + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +把所有步驟整合起來,即可得到一個可直接執行的程式: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### 預期輸出 + +執行程式後會印出: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +在任何瀏覽器開啟 `js_modified.html`,即可看到頁面呈現淡藍色背景,證明 **更改背景顏色(javascript)** 的操作已成功。 + +## 常見變化與例外情況 + +| 情況 | 處理方式 | +|------|----------| +| **不同的顏色格式** | 傳入任何 CSS 相容的值(`"red"`、`"#ff0000"`、`"rgb(255,0,0)"`)。 | +| **缺少 `` 標籤** | 程式會靜默失敗;您可以先使用 `page.getFirstByXPath("//body")` 確認 `` 是否存在。 | +| **大型 HTML 檔案** | 關閉 CSS(`setCssEnabled(false)`)並僅啟用所需的 JavaScript 功能,以降低記憶體使用量。 | +| **執行多段腳本** | 重複呼叫 `changeBackground`,或建立接受 JavaScript 命令清單的工具方法。 | + +## 結論 + +現在您已了解如何透過在 Java 中載入 HTML、**在 html 中執行 js**,以及 **使用 java 修改 html**,來 **設定頁面背景** 為任意顏色。上述完整範例使用最新的 HTMLUnit 函式庫,且可整合至更大的自動化流程,例如批次處理 HTML 報告或製作電子郵件範本。 + +**後續步驟** +- 探索其他 DOM 操作(例如插入元素、移除腳本)。 +- 結合此方法與 PDF 產生器,將已樣式化的頁面匯出為 PDF。 +- 若需要完整的瀏覽器相容性,可改用 Selenium WebDriver 等其他無頭引擎。 + +祝開發順利! + + +## 接下來該學什麼? + +以下教學與本指南緊密相關,能進一步深化您所學的技巧。每個資源皆提供完整可執行的程式碼範例與逐步說明,協助您掌握更多 API 功能,並在自己的專案中探索替代實作方式。 + +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Generate HTML from JavaScript in Java – Complete Step‑by‑Step Guide](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/java/configuring-environment/_index.md b/html/hungarian/java/configuring-environment/_index.md index 45956af5aa..bfd9f9663f 100644 --- a/html/hungarian/java/configuring-environment/_index.md +++ b/html/hungarian/java/configuring-environment/_index.md @@ -138,6 +138,10 @@ Ismerd meg, hogyan állítható be egy egyedi felhasználói stíluslap az Aspos **Aspose HTML Sandbox létrehozása Java-ban** Ismerd meg, hogyan hozhatsz létre biztonságos sandboxot az Aspose.HTML for Java-ban, részletes lépésekkel és példakóddal. +### [Egyéni felhasználói ügynök és képernyőméretek beállítása az Aspose.HTML for Java-ban](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) + +**Ismerd meg, hogyan állítható be egyedi felhasználói ügynök és a képernyő mérete az Aspose.HTML for Java-ban a pontos rendereléshez.** + --- **Last Updated:** 2025-12-03 diff --git a/html/hungarian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/hungarian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..be55d5bf1b --- /dev/null +++ b/html/hungarian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,193 @@ +--- +category: general +date: 2026-09-29 +description: Állíts be egyedi felhasználói ügynököt az Aspose.HTML for Java-ban, és + tanuld meg, hogyan állítható be a virtuális képernyőméret a pontos HTML rendereléshez. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: hu +lastmod: 2026-09-29 +og_description: Állíts be egyedi felhasználói ügynököt az Aspose.HTML for Java-ban, + és tanuld meg, hogyan állíts be virtuális képernyőméretet a pontos HTML rendereléshez. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Egyéni felhasználói ügynök és képernyőméretek beállítása az Aspose.HTML + for Java-ban +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Egyéni felhasználói ügynök és képernyőméretek beállítása az Aspose.HTML for + Java-ban +url: /hu/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Egyedi felhasználói ügynök és képernyőméretek beállítása az Aspose.HTML for Java-ban + +Ha **egyedi felhasználói ügynököt** kell beállítania HTML renderelésekor az Aspose.HTML for Java-val, ez az útmutató pontosan megmutatja, hogyan teheti ezt. A sandbox konfigurálásával lehetősége van **virtuális képernyőméret beállítására** is, biztosítva, hogy a layout egy valódi böngésző nézetablakhoz igazodjon. + +A tutorial végére egy teljes, futtatható programot kap, amely **megadja a felhasználói ügynököt**, **beállítja a képernyő szélességét**, és **beállítja a képernyő magasságát**. Külső eszközök nem szükségesek – csak az Aspose.HTML for Java és egy Java 8+ futtatókörnyezet. + +## Amit megtanul + +* Hogyan hozzon létre egy `SandboxConfiguration`-t a renderelés izolálásához. +* Hogyan **állítson be egyedi felhasználói ügynököt**, és miért fontos ez a reszponzív oldalaknál. +* Hogyan **állítson be virtuális képernyőméretet** (képernyő szélesség és magasság) a pontos elrendezéshez. +* Hogyan töltsön be egy HTML fájlt a sandboxba, és mentse el a feldolgozott eredményt. +* Gyakori buktatók és legjobb gyakorlatok a sandboxolt rendereléshez. + +> **Előfeltételek** – Szüksége van egy érvényes Aspose.HTML for Java licencre, Java 8 vagy újabb verzióra, valamint egy IDE-re (IntelliJ IDEA, Eclipse vagy VS Code). A példa egy helyi `input.html` fájlt használ, de bármely elérhető URL működik. + +![Sandbox flow diagram](sandbox-flow.png "egyedi felhasználói ügynök beállítása példa Java-ban") + +## 1. lépés: Sandbox konfiguráció létrehozása (az alap) + +A sandbox elkülöníti a renderelési környezetet a host JVM-től, ami elengedhetetlen, ha **egyedi felhasználói ügynököt** szeretne **beállítani** vagy megváltoztatni a nézetablak méretét. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Miért ez a lépés?* +`SandboxConfiguration` tartalmazza az összes renderelési beállítást, beleértve a **képernyőméreteket** és a **felhasználói‑ügynök** karakterláncokat. Ha a dokumentum betöltése előtt konfigurálja, garantálja, hogy a HTML motor ezeket a beállításokat már az első kérésnél figyelembe veszi. + +## 2. lépés: Képernyőméretek beállítása a valós eszköz utánzása érdekében + +A reszponzív oldalak gyakran a `window.innerWidth` és `window.innerHeight` értékeket olvassák. Ahhoz, hogy a motor úgy gondolja, egy 1024 × 768 képernyőn fut, **virtuális képernyőméretet** állít be: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Miért fontos* – Ha kihagyja a **képernyőméretek beállítását**, a renderelő egy nagyon kicsi nézetablakra válthat, ami miatt a CSS media query‑k a mobil elrendezést választják. A **képernyő szélességének** és **képernyő magasságának** kifejezett beállításával szabályozhatja, mely CSS szabályok lépnek életbe. + +## 3. lépés: Egyedi felhasználói‑ügynök karakterlánc megadása + +Néhány weboldal a felhasználói‑ügynök fejléc alapján különböző tartalmat szolgáltat. A **felhasználói ügynök megadásához** egyszerűen állítsa be a sandbox konfigurációban: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Miért használjunk egyedi felhasználói ügynököt?* +Egy egyedi karakterlánc megkerülheti a botdetektálást, aktiválhatja csak asztali környezetben elérhető funkciókat, vagy tesztelheti, hogyan viselkedik egy oldal egy adott böngésző verzióval. Az Aspose motor ezt az értéket minden, a külső erőforrások (CSS, képek, szkriptek) betöltésekor küldött HTTP kéréshez továbbítja. + +## 4. lépés: HTML dokumentum betöltése a sandboxban + +Miután a sandbox teljesen konfigurálva van, töltsük be a HTML fájlt. Az a konstruktor, amely fájlútvonalat és egy `SandboxConfiguration`‑t kap, automatikusan alkalmazza a korábban definiált beállításokat. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +Ha távoli URL‑ről szeretne betölteni, cserélje le a fájlútvonalat az URL karakterláncra – az Aspose.HTML továbbra is tiszteletben tartja a **egyedi felhasználói ügynök** és a **képernyőméretek** beállításait. + +## 5. lépés: A feldolgozott kimenet mentése + +Miután a dokumentum befejezte a betöltést, bármely támogatott formátumban menthet. Itt egy sandboxolt HTML fájlt írunk, amely tükrözi a saját beállításaink által okozott DOM‑változásokat. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +A mentett fájl ugyanazt a markup‑ot tartalmazza, de minden olyan szkript, amely a `navigator.userAgent`‑et vagy a `window.innerWidth`‑et kérdezi le, most a megadott értékeket fogja látni. + +## Teljes, futtatható példa + +Az összes lépés egyesítése egy önálló programot eredményez, amelyet egyszerűen másolhat, beilleszthet és futtathat. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Várható kimenet + +A program futtatása `sandboxed_output.html` fájlt hoz létre. Ha megnyitja egy böngészőben és a konzolon lekéri a `navigator.userAgent`‑et, **AsposeHTML/1.0**-t fog látni. Hasonlóképpen a `window.innerWidth` **1024**‑et jelez, ami megerősíti, hogy a **képernyőméretek beállítása** a várt módon működött. + +## Gyakori kérdések és szél‑eset kezelése + +| Kérdés | Válasz | +|----------|--------| +| **Mi van, ha az oldal további erőforrásokat tölt be egy másik domainről?** | A sandbox minden kérésnél továbbítja a **egyedi felhasználói ügynököt**, de a cross‑origin szabályok továbbra is érvényesek. Ha lazítani szeretné ezeket a korlátozásokat, használja a `sandboxConfig.setAllowCrossDomain(true)` beállítást. | +| **Megváltoztathatom a képernyőméretet a dokumentum betöltése után?** | Nem. A képernyőméreteket az első elrendezési lépés során olvassa be a motor. Más mérettel való rendereléshez hozzon létre egy új `SandboxConfiguration`‑t, és töltse újra a dokumentumot. | +| **Kell-e meghívni a `document.close()`‑t?** | A `HTMLDocument` implementálja az `AutoCloseable` interfészt. A try‑with‑resources blokk használata biztosítja a megfelelő takarítást, de egyszerű szkriptekben az explicit `close()` opcionális. | +| **Miben különbözik ez az HTTP‑kliensben történő felhasználói‑ügynök beállításától?** | A sandboxon beállított felhasználói‑ügynök **minden** erőforráskérésre hat, amit a HTML motor indít, nem csak az első HTML letöltésre. Így sokkal inkább egy valódi böngésző viselkedését utánozza. | +| **Biztonságos-e a sandbox megbízhatatlan HTML‑hez?** | Igen. A sandbox izolálja a fájlrendszer hozzáférését és a hálózati hívásokat a konfiguráció szerint, csökkentve a rosszindulatú szkriptek által a host JVM-re gyakorolt kockázatot. | + +## Profi tippek + +* **Konfigurációk újrahasználata** – Ha sok oldalt renderel ugyanazzal a nézetablakkal, hozzon létre egyetlen `SandboxConfiguration`‑t, és használja újra, hogy elkerülje az objektum‑létrehozási többletterhet. +* **Hibakeresés naplózással** – Engedélyezze az Aspose.HTML naplózást (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) a megtekintett erőforrások és a használt egyedi felhasználói‑ügynök nyomon követéséhez. +* **Kombinálja CSS media query‑kkel** – A **képernyő szélességének** módosításával tesztelheti, hogyan viselkedik a reszponzív dizájn táblagépeken, telefonokon vagy nagy asztali monitorokon anélkül, hogy valódi böngészőt nyitna. + +## Következtetés + +Most már tudja, hogyan **állítson be egyedi felhasználói ügynököt** és **képernyőméreteket**, amikor HTML‑t renderel az Aspose.HTML for Java‑val. A sandbox konfigurálásával izolálja a környezetet, szabályozza a nézetablakot, és biztosítja, hogy a külső erőforrások pontosan az Ön által megadott fejléceket kapják. Ez a technika elengedhetetlen a reszponzív elrendezések teszteléséhez, a botblokkok megkerüléséhez vagy asztali‑specifikus funkciók automatizált pipeline‑okban történő reprodukálásához. + +A következő lépésként érdemes megismerni **hogyan állítsunk be egyedi cookie‑kat** vagy **hogyan rögzítsünk renderelt képernyőképeket** az Aspose.HTML renderelési API‑jával – mindkettő ugyanazon sandbox konfigurációs mintára épül, amelyet most elsajátított. + +Boldog kódolást! + +## Mit érdemes még megtanulni? + +Az alábbi tutorialok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás komplett, működő kódrészleteket és lépésről‑lépésre magyarázatokat tartalmaz, hogy további API‑funkciókat saját projektjeiben is könnyedén alkalmazhasson. + +- [Nagy DPI renderelés Java-ban – Weboldalak képernyőképeinek rögzítése egyedi felhasználói ügynökkel](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [Hogyan töltsünk be HTML-t, állítsunk be eszköz DPI-t és olvassuk ki a háttérszínt](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [HTML fájl létrehozása Java-ban és hálózati szolgáltatás beállítása (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/java/creating-managing-html-documents/_index.md b/html/hungarian/java/creating-managing-html-documents/_index.md index fea21a2d11..1d9790bce0 100644 --- a/html/hungarian/java/creating-managing-html-documents/_index.md +++ b/html/hungarian/java/creating-managing-html-documents/_index.md @@ -62,6 +62,8 @@ Ebből a lépésről lépésre szóló útmutatóból megtudhatja, hogyan hozhat Fedezze fel, hogyan tölthet be egyszerűen HTML dokumentumokat egy URL-ről Java nyelven az Aspose.HTML segítségével. Lépésről lépésre bemutató oktatóanyag. ### [HTML lekérdezése Java-ban – Teljes útmutató](./how-to-query-html-in-java-complete-tutorial/) Ismerje meg, hogyan kérdezhet le HTML-t Java használatával, lépésről lépésre útmutató a hatékony adatkinyeréshez. +### [Hogyan válasszon ki elemeket osztály szerint Java-ban a querySelectorAll használatával](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Ismerje meg, hogyan használhatja a querySelectorAll metódust osztályok alapján elemek kiválasztására Java-ban az Aspose.HTML segítségével. ### [HTML elem betöltése, lekérdezése és számlálása Java-ban](./how-to-parse-html-java-load-query-count-elements/) Ismerje meg, hogyan tölthet be, kérdezhet le és számolhat meg HTML elemeket Java nyelven az Aspose.HTML segítségével. ### [HTML-dokumentum betöltése Java-ban – Teljes útmutató XPath és CSS használatával](./load-html-document-java-complete-guide-with-xpath-css/) @@ -78,8 +80,11 @@ Ismerje meg az SVG dokumentumok létrehozását és kezelését az Aspose.HTML f Ismerje meg, hogyan számolhatja meg a HTML karaktereket Java-ban az Aspose.HTML segítségével, részletes, lépésről‑lépésre útmutatóval. ### [HTML sandbox létrehozása Java-ban – Lépésről‑lépésre útmutató](./create-sandbox-for-html-in-java-step-by-step-guide/) Ismerje meg, hogyan hozhat létre biztonságos sandbox környezetet HTML feldolgozáshoz Java-ban, részletes lépésekkel. -### [HTML-dokumentum létrehozása Java-val – JSON lekérése és tartalom generálása](./create-html-document-with-java-fetch-json-and-generate-conte/) +### [HTML-dokumentum létrehozása Java-val – JSON lekérése és tartalom generálása](./create-html-document-with-java-fetch-json-and-conte/) Ismerje meg, hogyan hozhat létre HTML-dokumentumot Java-ban JSON adatok lekérésével és dinamikus tartalom generálásával. +### [HTML elem létrehozása Java-ban az Aspose.HTML használatával](./how-to-create-html-element-in-java-using-aspose-html/) +### [HTML elemek számlálása Java-ban XPath használatával](./how-to-count-html-elements-in-java-with-xpath/) +Ismerje meg, hogyan számolhatja meg a HTML elemeket Java-ban XPath használatával. {{< /blocks/products/pf/tutorial-page-section >}} @@ -102,3 +107,10 @@ Tanulja meg, hogyan járhatja be a NodeList-et Java-ban, olvashat HTML-t és sze Fedezze fel, hogyan nyerhet ki szöveget HTML-ből Java használatával, részletes, lépésről‑lépésre útmutató. ### [NodeList bejárása Java-ban – Teljes útmutató](./iterate-over-nodelist-java-complete-guide/) Ismerje meg, hogyan iterálhat a NodeList elemein Java-ban az Aspose.HTML segítségével, részletes, lépésről‑lépésre útmutató. + +{{< /blocks/products/pf/tutorial-page-section >}} + +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} + +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/hungarian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..68f399fcc6 --- /dev/null +++ b/html/hungarian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,218 @@ +--- +category: general +date: 2026-09-29 +description: Tanulja meg, hogyan számolhat HTML elemeket Java-ban az Aspose.HTML és + az XPath használatával. Ez az útmutató bemutatja, hogyan töltsön be egy HTML dokumentumot, + hogyan válasszon ki csomópontokat XPath-szel, és hogyan kapjon egy csomópontlistát. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: hu +lastmod: 2026-09-29 +og_description: Hogyan számoljuk meg a HTML elemeket Java-ban az Aspose.HTML használatával. + Kövesse ezt a teljes útmutatót, hogy betöltsön egy HTML dokumentumot, XPath-szel + válasszon ki csomópontokat, Java-ban értékelje ki az XPath-et, és kapjon egy csomópontlistát. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: Hogyan számoljuk meg a HTML elemeket Java-ban – lépésről lépésre útmutató +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: HTML elemek számlálása Java-ban XPath segítségével +url: /hu/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# HTML elemek számlálása Java-ban XPath-szel + +Ha Java‑alkalmazásból szeretnél **how to count HTML elements**-t egy weboldalon, ez az útmutató egy teljes, azonnal futtatható megoldást nyújt. Az első két mondat végére pontosan tudni fogod, hogyan kell betölteni egy HTML dokumentumot, **select nodes with XPath**‑et használni, és egy olyan node listát lekérni, amelyet megszámolhatsz. + +Az Aspose.HTML for Java könyvtárat fogjuk használni, mert DOM‑kompatibilis API‑t és egy erőteljes XPath motorral rendelkezik. A tutorial mindent lefed, amire szükséged lehet — importok, kód, magyarázatok és a várt kimenet — így a példát egyszerűen beillesztheted a projektedbe, és azonnal láthatod az eredményt. Útközben érintjük a **select nodes with XPath**, **get node list Java**, **load HTML document Java** és **evaluate XPath in Java** témákat is. + +## What you’ll achieve + +* Load an HTML file from the file system. +* Create an XPath expression that targets specific elements. +* Evaluate the XPath expression against the document. +* Retrieve a `NodeList` and count how many matching elements exist. + +No external services or complex configuration are required; just the Aspose.HTML JAR on your classpath. + +--- + +## How to count HTML elements with XPath in Java + +This step‑by‑step section shows the exact code you need. Each subsection corresponds to a logical part of the process, making it easy to adapt or extend. + +### Step 1: Load the HTML document in Java + +First, bring the HTML file into memory. The `HTMLDocument` class parses the file and builds a DOM tree that XPath can query. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Why this matters:** +Loading the document creates a DOM representation, which is required for any XPath evaluation. If the file path is wrong, Aspose.HTML throws a `FileNotFoundException`, so double‑check the location of `input.html`. + +### Step 2: Create and evaluate an XPath expression + +Now we build an XPath that selects the elements we want to count. In this example we count all `` tags whose `alt` attribute equals `"logo"`. + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Why this matters:** +The expression `//img[@alt='logo']` is a concise way to **select nodes with XPath**. The `evaluate` call **evaluate XPath in Java** and returns a generic `XPathResult`. Casting to `NodeList` gives us direct access to the collection of matching nodes. + +### Step 3: Retrieve and count the node list + +Finally, we count how many nodes were returned. The `NodeList` API provides `getLength()` for this purpose. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Why this matters:** +`getLength()` is the simplest way to **get node list Java** and obtain a count. If the XPath matches no elements, the length will be `0`, which your application can handle gracefully. + +### Full runnable example + +Below is the complete program, including all imports and a minimal `main` method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML JAR to your project, and run it. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Expected output** + +If `input.html` contains three `logo` tags, the program prints: + +``` +Found 3 logo images. +``` + +If no such images exist, it prints: + +``` +Found 0 logo images. +``` + +--- + +## Common variations and edge cases + +| Situation | What to change | Reason | +|-----------|----------------|--------| +| Count a different element (e.g., `
` with class `header`) | Change the XPath to `//div[@class='header']` | XPath syntax lets you target any tag/attribute. | +| Count all elements regardless of attribute | Use `//*` as the XPath expression | `//*` selects every element node in the document. | +| Large documents causing memory pressure | Use a streaming parser or evaluate XPath on a fragment | Aspose.HTML offers `HTMLDocumentFragment` for partial parsing. | +| Need the actual nodes, not just the count | Iterate over `nodes.item(i)` | You can process each node after counting. | + +**Pro tip:** Always validate the XPath string before passing it to `createXPathExpression`. An invalid expression throws `XPathException`, which you can catch to provide a friendly error message. + +--- + +## Troubleshooting checklist + +1. **Library not found** – Ensure the Aspose.HTML for Java JAR is on the classpath (`-cp` or your IDE’s dependencies). +2. **File not found** – Verify that `input.html` is located relative to the working directory or use an absolute path. +3. **Zero results** – Double‑check the attribute values and case sensitivity (`alt='logo'` vs `alt='Logo'`). XPath is case‑sensitive. +4. **Performance concerns** – Reuse a single `HTMLDocument` instance if you need to run many XPath queries on the same file. + +--- + +## Conclusion + +You now know **how to count HTML elements** in Java using Aspose.HTML and XPath. By loading the HTML document, creating an XPath expression, **evaluating XPath in Java**, and retrieving a **node list**, you can quickly determine the number of matching elements. This technique works for any tag or attribute, making it a versatile tool for web‑scraping, automated testing, or content analysis. + +Next steps you might explore include: + +* Using **select nodes with XPath** to extract attribute values (e.g., image `src`). +* Combining multiple XPath queries to build a report of element statistics. +* Integrating this logic into a larger Java service that processes HTML files in bulk. + +Feel free to experiment with different XPath expressions and document structures—counting HTML elements is just the beginning! + + +## What Should You Learn Next? + + +The following tutorials cover closely related topics that build on the techniques demonstrated in this guide. Each resource includes complete working code examples with step-by-step explanations to help you master additional API features and explore alternative implementation approaches in your own projects. + +- [How to Parse HTML Java – Load, Query & Count Elements](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Load HTML Document Java – Complete Guide with XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/hungarian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..97354734b4 --- /dev/null +++ b/html/hungarian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,185 @@ +--- +category: general +date: 2026-09-29 +description: Tanulja meg, hogyan hozhat létre HTML elemet Java-ban, adjon hozzá egy + bekezdést, állítsa be a szövegét, és fűzze hozzá a body-hez az Aspose.HTML segítségével. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: hu +lastmod: 2026-09-29 +og_description: HTML elem létrehozása Java-ban egy bekezdés hozzáadásával, a szöveg + beállításával, és az Aspose.HTML segítségével a body-hez való csatolással. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: HTML elem létrehozása Java-ban – lépésről lépésre Aspose.HTML útmutató +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: HTML elem létrehozása Java-ban az Aspose.HTML használatával +url: /hu/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan hozhatunk létre HTML elemet Java-ban az Aspose.HTML segítségével + +Ha **HTML elemet** kell **létrehoznod** egy Java alkalmazásban, ez az útmutató egy teljes, futtatható megoldást mutat be. Megtanulod, hogyan **adjunk hozzá egy bekezdést**, állítsuk be a szövegét, és **fűzzük hozzá az elemet a body-hoz** egy meglévő HTML fájlban az Aspose.HTML használatával. + +A tutorial mindent lefed a dokumentum betöltésétől a módosított fájl mentéséig, így a kódot egyszerűen átmásolhatod a saját projektedbe további kutatás nélkül. + +## Előfeltételek + +Mielőtt elkezdenéd, győződj meg róla, hogy: + +* Java 17 vagy újabb telepítve van. +* Aspose.HTML for Java 23.10 (vagy a legújabb verzió) hozzá van adva a projekted classpath-jához. +* Egy egyszerű `input.html` fájl egy ismert könyvtárban. A fájl lehet üres (``) vagy már tartalmazhat markup-ot. + +## 1. lépés: A meglévő HTML dokumentum betöltése + +A forrásfájl betöltése egy manipulálható DOM fát ad. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +A `HTMLDocument` konstruktor beolvassa a fájlt és élő DOM-ot hoz létre. Ha a fájlt nem lehet olvasni, az Aspose.HTML `IOException`-t dob; ezt hagyhatod továbbterjedni, vagy kezelheted egy try‑catch blokkban. + +## 2. lépés: Új `

` elem létrehozása és szöveg hozzáadása a HTML-hez + +Új elem létrehozása hasonló a böngészőben a `document.createElement` használatához. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +A `setTextContent` automatikusan létrehoz egy szövegcserkét és csatolja az elemhez, ami a **szöveg HTML-hez való hozzáadásának** ajánlott módja. Ez a metódus automatikusan escape-eli azokat a karaktereket, amelyek megtörhetnék a markup-ot. + +## 3. lépés: Az elem hozzáfűzése a body-hoz + +Miután a bekezdés készen áll, be kell helyezned a dokumentum `` részébe. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +A `doc.getBody()` visszaadja a `` csomópontot, és az `appendChild` az új `

` elemet az utolsó gyermekként illeszti be. Ha a dokumentumnak nincs `` eleme (ami ritka egy jól formált HTML fájl esetén), az Aspose.HTML automatikusan létrehozza. + +## 4. lépés: A módosított dokumentum mentése + +Végül írjuk vissza a frissített DOM-ot a lemezre. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +A `save` sorosítja a DOM-ot, megőrizve a meglévő markup-ot és hozzáadva az új bekezdést. Az eredményül kapott `output.html` a következőket tartalmazza: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Teljes forráskód (java html példa) + +Az összes lépés egyesítése egy önálló programot eredményez, amelyet azonnal futtathatsz. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### Mit csinál a kód + +| Lépés | Művelet | Miért fontos | +|------|--------|--------------| +| Dokumentum betöltése | `new HTMLDocument(...)` | A forrás HTML-t DOM-ba elemzi, amelyet módosíthatsz. | +| Elem létrehozása | `doc.createElement("p")` | A böngésző API-ját tükrözi, biztosítva, hogy az elem megfeleljen a HTML szabványoknak. | +| Szöveg beállítása | `setTextContent(...)` | Biztosítja a megfelelő escape-elést és elkerüli a kézi szövegcserke létrehozását. | +| A body-hoz hozzáfűzés | `doc.getBody().appendChild(...)` | Az új elemet a böngészők által renderelt helyre helyezi. | +| Fájl mentése | `doc.save(...)` | A változtatásokat perzisztálja, érvényes HTML fájlt hozva létre további felhasználásra. | + +## Gyakori variációk és szélhelyzetek + +* **Több elem hozzáadása** – ismételd meg a 2‑3. lépéseket minden új csomópont esetén, mielőtt meghívod a `save`-t. +* **Beszúrás egy adott csomópont elé** – használd az `insertBefore(newNode, referenceNode)`-t az `appendChild` helyett. +* **Fragmentumokkal való munka** – a `doc.createDocumentFragment()` lehetővé teszi, hogy egy csomópontrendszert építs fel, és egy művelettel csatolj, ami nagy frissítéseknél javítja a teljesítményt. +* **UTF‑8 karakterek kezelése** – Az Aspose.HTML automatikusan UTF‑8-at ír; csak győződj meg róla, hogy a forrásfájl is ugyanígy van kódolva. + +## Gyakorlati tippek + +* **Útvonal kezelése** – Használd a `java.nio.file.Paths` osztályt platform‑független fájlutak építéséhez. +* **Kivételbiztonság** – Csomagold be az egész blokkot egy try‑with‑resources szerkezetbe, ha további stream-eket kell bezárnod. +* **Teljesítmény** – Nagyon nagy HTML fájlok esetén fontold meg a dokumentum betöltését `HTMLDocument(String, LoadOptions)`-nal, ahol letilthatod a külső erőforrások betöltését a gyorsabb parsing érdekében. + +## Az eredmény ellenőrzése + +A program futtatása után nyisd meg az `output.html` fájlt bármely böngészőben. Látnod kell a „Added by Aspose.HTML” bekezdést, amely a eredeti body vége után jelenik meg. Ellenőrizd a forráskódot, hogy megbizonyosodj róla, hogy a `

` elem jelen van a `` belsejében. + +## Összegzés + +Most már tudod, hogyan **hozz létre HTML elemet** Java-ban, **adj hozzá egy bekezdést**, **szöveget a HTML-hez**, és **fűzd hozzá az elemet a body-hoz** az Aspose.HTML segítségével. A teljes **java html példa** egy tiszta, termelés‑kész munkafolyamatot mutat be, amelyet bővíthetsz bármely HTML dokumentum részének manipulálására. + +Ezután fedezd fel a kapcsolódó témákat, például **attribútumok módosítása**, **csomópontok eltávolítása**, vagy **CSS stílusok kezelése**, hogy gazdagabb HTML feldolgozó csővezetékeket építs. Boldog kódolást! + +## Mit érdemes legközelebb tanulni? + +Az alábbi tutorialok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás tartalmaz teljes, működő kódrészleteket lépésről‑lépésre magyarázatokkal, hogy segítsenek elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Create new html element with Java – Full Aspose.HTML Guide](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [append child to body in Java – Full Aspose.HTML Tutorial](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Append Element to Body with Aspose.HTML for Java using a DOM Mutation Observer](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/hungarian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..8418af0fdb --- /dev/null +++ b/html/hungarian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,254 @@ +--- +category: general +date: 2026-09-29 +description: Tanulja meg, hogyan válasszon ki elemeket osztály alapján, olvassa be + a HTML-t fájlból, és találja meg a külső hivatkozásokat Java-ban. Ez a lépésről‑lépésre + útmutató hatékonyan bemutatja a NodeList iterálását. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: hu +lastmod: 2026-09-29 +og_description: Válasszon ki elemeket osztály alapján Java-ban, olvassa be a HTML-t + fájlból, és találja meg a külső hivatkozásokat a querySelectorAll segítségével. + Kövesse a teljes példát a NodeList iterálásához. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Elemek kiválasztása osztály alapján Java-ban – teljes útmutató a querySelectorAll + használatához +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: Hogyan válasszunk ki elemeket osztály szerint Java-ban a querySelectorAll segítségével +url: /hu/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan válasszunk ki elemeket osztály szerint Java-ban a querySelectorAll használatával + +Ha Java-ban HTML-fájlt dolgozol fel, és **osztály szerint kell elemeket kiválasztani**, ez az útmutató pontosan megmutatja, hogyan kell ezt megtenni. Megtanulod, hogyan olvass HTML-t fájlból, használod a `querySelectorAll`-t külső linkek megtalálásához, és biztonságosan iterálod a kapott `NodeList`-et. + +A HTML kezelése Java-ban gyakran nehézkesnek tűnik, de a modern könyvtárak egy tömör, CSS‑selector‑alapú API-t biztosítanak. Az alábbi példa **jsoup**-ot (1.17.2 verzió) használ, mivel ez megvalósítja a `querySelectorAll`‑stílusú szelektorokat, és egy `Elements` gyűjteményt ad vissza, amely úgy viselkedik, mint egy `NodeList`. Szükség esetén ugyanazt a logikát más DOM megvalósításokra is adaptálhatod. + +## Előkövetelmények + +* JDK 17 vagy újabb telepítve. +* Maven vagy Gradle a függőségkezeléshez. +* Alapvető ismeretek a Java stream-ekkel és a DOM modellel. + +Add hozzá a jsoup-ot a projektedhez: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## 1. lépés: HTML beolvasása fájlból + +Az első feladat a HTML dokumentum betöltése a lemezről. A `Jsoup.parse(Path, Charset)` beolvassa a fájlt, és felépít egy DOM-fát, amelyet lekérdezhetsz. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Miért fontos*: A fájl egyszeri betöltése elkerüli az ismételt I/O műveleteket, miközben később elemeket iterálsz. A `Document` objektum a teljes DOM-ot tartalmazza, ami gyors szelektor lekérdezéseket tesz lehetővé. + +## 2. lépés: `querySelectorAll` használata elemek osztály szerinti kiválasztásához + +Most, hogy a dokumentum a memóriában van, **osztály szerint választhatod ki az elemeket** egy CSS szelektor segítségével. Az `"a.external"` szelektor olyan `` tageket egyeztet, amelyek `external` osztályt tartalmaznak – pontosan ami szükséges a **külső linkek megtalálásához**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Miért fontos*: Az osztály szelektor használata kifejező és hatékony is egyben. A könyvtár a szelektort egy optimalizált bejárássá alakítja, így nem kell manuális ciklusokat írnod minden csomóponton. + +## 3. lépés: NodeList (Elements) iterálása Java-ban + +A `Elements` implementálja a `Iterable` interfészt, ami azt jelenti, hogy egy szokásos `for‑each` ciklust használhatsz a **NodeList Java** objektumok iterálásához. Az alábbi ciklus kiírja minden link `href` attribútumát. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Miért fontos*: A közvetlen iteráció olvashatóvá teszi a kódot, és elkerüli a gyűjtemény stream-mé alakításának többletterhelését, ha csak egyszerű kimenetre van szükség. + +## Teljes működő példa + +A három lépés összevonásával egy önálló programot kapsz, amelyet a parancssorból futtathatsz. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Várt kimenet + +Tegyük fel, hogy az `input.html` tartalma a következő: + +```html +Example +About +OpenAI +``` + +A program futtatása a következőt írja ki: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Pro tippek és gyakori buktatók + +* **A kódolás számít** – Mindig UTF‑8 (vagy a forrásnak megfelelő karakterkódolás) használatával olvasd a fájlt. A helytelen kódolás torzíthatja az attribútumértékek karaktereit. +* **Több osztály** – Ha egy elemnek több osztálya van (pl. `class="btn external"`), a `"a.external"` szelektor továbbra is egyezik, mivel a CSS osztály szelektorok a token jelenlétét ellenőrzik, nem a pontos karakterláncot. +* **Teljesítmény tipp** – Ha csak a `href` attribútumra van szükséged, kérheted közvetlenül a `doc.select("a.external[href]").eachAttr("href")` segítségével. Ez elkerüli a teljes `Element` objektumok létrehozását minden egyezéshez. +* **Null biztonság** – A `link.attr("href")` üres stringet ad vissza, ha az attribútum hiányzik, így nem kell null ellenőrzést végezni a kiírás előtt. + +## Gyakran ismételt kérdések + +**Q: Működik ez olyan HTML fragmentumokkal, amelyeknek nincs `` gyökérelem?** +A: Igen. A `Jsoup.parse` a bemenetet fragmentumként kezeli, és automatikusan hozzáadja a hiányzó gyökérelemeket, így a szelektorok a fragmentum body-ján is működnek. + +**Q: Használhatom a `querySelectorAll`-t jsoup nélkül?** +A: A standard Java DOM API (`org.w3c.dom`) nem tartalmaz `querySelectorAll`-t. Olyan könyvtárak, mint a **HTMLUnit** vagy a **jodd-lagarto**, hasonló metódusokat biztosítanak. Az itt bemutatott minta – betöltés, CSS-szel kiválasztás, iterálás – változatlan marad. + +**Q: Mi a teendő, ha a linkeket módosítani szeretném a kiírás helyett?** +A: Miután megkaptad az egyes `Element`-eket, meghívhatod a `link.attr("href", "newUrl")`-t, majd a dokumentumot visszaírhatod a lemezre a `Files.writeString` segítségével. + +## Összegzés + +Most már tudod, hogyan **válassz ki elemeket osztály szerint**, **olvasd be a HTML-t fájlból**, **találd meg a külső linkeket**, és **iteráld a NodeList-et Java-ban** a `querySelectorAll`‑stílusú szelektorok használatával. A teljes példa egy tiszta, production‑kész munkafolyamatot mutat be, amelyet beágyazhatsz nagyobb adatgyűjtő vagy átalakító csővezetékekbe. + +Ezután fedezd fel a kapcsolódó témákat, mint a **dinamikus tartalom feldolgozása HTMLUnit-tal**, **módosított HTML visszaírása a lemezre**, vagy **Java stream-ek használata a link URL-ek listába gyűjtéséhez**. Mindegyik a itt bemutatott osztály‑alapú kiválasztás alaptechnikájára épül. Boldog kódolást! + +## Mit érdemes legközelebb megtanulni? + +A következő oktatóanyagok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás teljes, működő kódrészleteket tartalmaz lépésről‑lépésre magyarázatokkal, hogy segítsenek elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket a saját projektjeidben. + +- [Hogyan kérdezzünk le HTML-t Java-ban – Elek kiválasztása, szűrés attribútum szerint, és szöveg lekérése](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [NodeList iterálása Java-ban – HTML beolvasása és kép src lekérése](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [HTML dokumentumok betöltése fájlból Aspose.HTML for Java-ban](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/java/css-html-form-editing/_index.md b/html/hungarian/java/css-html-form-editing/_index.md index c369042ddd..ac5f518cb9 100644 --- a/html/hungarian/java/css-html-form-editing/_index.md +++ b/html/hungarian/java/css-html-form-editing/_index.md @@ -39,7 +39,8 @@ Ismerje meg, hogyan tölthet be HTML-t Java-ban, és használhatja a query selec Ismerje meg, hogyan válassza ki a kívánt elemet osztály alapján Java-ban az Aspose.HTML segítségével. ### [CSS olvasása Java-ban – Teljes útmutató az Aspose.HTML segítségével](./how-to-read-css-in-java-complete-guide-with-aspose-html/) Ismerje meg, hogyan olvashat és elemezhet CSS-fájlokat Java-ban az Aspose.HTML segítségével, részletes példákkal és tippekkel. - +### [CSS olvasása HTML-ből Java-ban – Aspose.HTML használatával](./how-to-read-css-from-html-with-aspose-html-in-java/) +Ismerje meg, hogyan olvashat CSS‑stílusokat HTML‑dokumentumból Java‑ban az Aspose.HTML segítségével. ### [HTML elemzése Java-val: CSS tulajdonság kinyerése és betűméret lekérése](./parse-html-with-java-extract-css-property-and-get-font-size/) Ismerje meg, hogyan lehet Java-val HTML-t elemezni, CSS‑tulajdonságokat kinyerni és a betűméretet meghatározni. ### [HTML lekérdezése Java-val – HTML betöltése, CSS szelektor, és címsorok kinyerése](./how-to-query-html-in-java-load-html-css-selector-and-extract/) diff --git a/html/hungarian/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md b/html/hungarian/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md new file mode 100644 index 0000000000..986ba43207 --- /dev/null +++ b/html/hungarian/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/_index.md @@ -0,0 +1,278 @@ +--- +category: general +date: 2026-09-29 +description: Hogyan olvassuk ki a CSS-t HTML-ből az Aspose.HTML for Java használatával. + Tanulja meg, hogyan válasszon elemet ID alapján, hogyan szerezze meg a számított + stílust, hogyan nyerje ki a CSS-tulajdonságokat, és hogyan jelenítse meg a háttérszínt. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to read css +- select element by id +- get computed style +- extract css from html +- display background color +language: hu +lastmod: 2026-09-29 +og_description: Hogyan olvassuk ki a CSS-t HTML-ből az Aspose.HTML for Java használatával. + Lépésről‑lépésre útmutató az elem ID szerinti kiválasztásához, a számított stílus + lekéréséhez, a CSS kinyeréséhez és a háttérszín megjelenítéséhez. +og_image_alt: Screenshot of Java code extracting background‑color CSS using Aspose.HTML +og_title: Hogyan olvassuk be a CSS-t HTML-ből az Aspose.HTML használatával – Java + útmutató +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + headline: How to read CSS from HTML with Aspose.HTML in Java + type: TechArticle +- description: How to read CSS from HTML using Aspose.HTML for Java. Learn to select + element by ID, get computed style, extract CSS properties, and display background + color. + name: How to read CSS from HTML with Aspose.HTML in Java + steps: + - name: Prerequisites + text: '* Java 8 or newer installed. * Maven or Gradle to manage the Aspose.HTML + dependency. * A simple HTML file (e.g., `input.html`) that contains an element + with an `id` attribute you want to inspect.' + - name: Element not found + text: If `querySelector` returns `null`, the code above already prints an error + and exits. In production you might want to throw a custom exception or fallback + to a default element. + - name: Multiple elements with the same ID (invalid HTML) + text: Although IDs should be unique, malformed HTML can contain duplicates. `querySelector` + returns the first match. To process all matches, use `querySelectorAll` and + iterate over the resulting `NodeList`. + - name: Different CSS properties + text: 'To **extract css from html** beyond the background color, simply call the + appropriate getter on `StyleDeclaration`. Common getters include:' + - name: Browser‑specific prefixes + text: 'Aspose.HTML normalizes vendor‑prefixed properties (e.g., `-webkit-transform`) + into their standard equivalents when possible. If you need the raw value, you + can query the `StyleDeclaration` map directly:' + type: HowTo +tags: +- Aspose.HTML +- Java +- CSS extraction +- HTML parsing +title: Hogyan olvassuk be a CSS-t HTML-ből az Aspose.HTML használatával Java-ban +url: /hu/java/css-html-form-editing/how-to-read-css-from-html-with-aspose-html-in-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan olvassuk be a CSS-t HTML-ből az Aspose.HTML segítségével Java-ban + +Ha Java alkalmazásban **how to read css**-t szeretne egy HTML fájlból beolvasni, ez az útmutató pontosan megmutatja, hogyan. Az első két mondat végére már tudni fogja, hogyan válasszon ki elemet azonosítóval, hogyan kapja meg a számított stílust, és hogyan jelenítse meg a háttérszínt – mindezt az Aspose.HTML segítségével. + +Lépésről lépésre végigvezetünk egy HTML dokumentum betöltésén, egy adott elem megtalálásán, a számított CSS kinyerésén és a background‑color érték kiírásán. Az Aspose.HTML for Java könyvtáron kívül nincs szükség külső eszközökre, és a kód Java 8+ verziókkal működik. + +## Mit fogsz megtanulni + +* Hogyan olvassuk be a CSS-t egy HTML dokumentumból az Aspose.HTML használatával. +* Hogyan **select element by id** a `querySelector`-rel. +* Hogyan **get computed style**-t kapjunk bármely DOM csomóponthoz. +* Hogyan **extract CSS from HTML**-t és olvassuk el az egyes tulajdonságokat, például a **display background color**-t. +* Gyakori buktatók és legjobb gyakorlatok a megbízható CSS kinyeréshez. + +### Előfeltételek + +* Java 8 vagy újabb telepítve. +* Maven vagy Gradle az Aspose.HTML függőség kezeléséhez. +* Egy egyszerű HTML fájl (pl. `input.html`), amely tartalmaz egy elemet egy `id` attribútummal, amelyet meg szeretne vizsgálni. + +--- + +## 1. lépés: HTML dokumentum betöltése (how to read css) + +Az első művelet minden CSS‑olvasási munkafolyamatban a forrás HTML betöltése. Az Aspose.HTML biztosítja a `HTMLDocument` osztályt, amely beolvassa a fájlt és felépíti a lekérdezhető DOM-ot. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file from the file system +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); +``` + +**Why this matters:** A dokumentum betöltése teljes DOM-ot hoz létre, lehetővé téve a megbízható stílus számítást, amely tükrözi a böngésző által előállított eredményt. Ennek a lépésnek a kihagyása nyers szöveget hagyna Önnek egy strukturált dokumentum helyett. + +--- + +## 2. lépés: Elem kiválasztása azonosítóval + +Egy adott csomóponthoz tartozó CSS kinyeréséhez először hivatkozásra van szükség. A `querySelector` metódus bármilyen CSS szelektort elfogad, így tökéletes az ID szerinti kiválasztáshoz. + +```java +import com.aspose.html.dom.Element; + +// Locate the

(or any element) with id="myDiv" +Element divElement = document.querySelector("#myDiv"); +if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; +} +``` + +**Why use `querySelector`?:** Ugyanazt a szelektor szintaxist követi, amelyet a CSS-ben használ, így újra felhasználhatja a jól ismert mintákat, mint a `#myDiv`, `.className` vagy attribútum szelektorok extra elemző logika nélkül. + +--- + +## 3. lépés: Az elem számított stílusának lekérése + +Miután megvan az elem, az Aspose.HTML képes kiszámítani a **computed style**-t – a végső értékeket, miután minden CSS szabály, öröklődés és alapértelmezett érték alkalmazásra került. + +```java +import com.aspose.html.css.StyleDeclaration; + +// Retrieve the computed CSS for the selected element +StyleDeclaration computedStyle = divElement.getComputedStyle(); +if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; +} +``` + +**Why compute the style?:** A számított stílus tükrözi a tényleges értékeket, amelyeket a böngésző megjelenítene, nem csak a nyers deklarációkat. Ez elengedhetetlen, ha tudni kell a tényleges `background-color`, `font-size` vagy bármely más tulajdonság értékét. + +--- + +## 4. lépés: CSS tulajdonság kinyerése és a háttérszín megjelenítése + +Most, hogy megvan a `StyleDeclaration`, bármely CSS tulajdonságot kiolvashat. Ebben a példában a **display background color**-ra fókuszálunk, de ugyanaz a megközelítés működik a `font-size`, `margin` stb. esetén is. + +```java +// Access the background-color property +String backgroundColor = computedStyle.getBackgroundColor(); + +// Print the result to the console +System.out.println("Background color: " + backgroundColor); +``` + +**Várható kimenet** + +``` +Background color: rgb(255, 0, 0) +``` + +Ha az elem a háttérszínét egy szülőtől vagy egy stíluslapról örökli, a számított érték már tartalmazni fogja ezt az öröklődést. + +--- + +## Szélsőséges esetek és változatok kezelése + +### Elem nem található +Ha a `querySelector` `null`-t ad vissza, a fenti kód már kiír egy hibát és kilép. Éles környezetben érdemes lehet egy egyedi kivételt dobni vagy egy alapértelmezett elemre visszaesni. + +### Több elem ugyanazzal az ID-vel (érvénytelen HTML) +Bár az ID-knak egyedinek kell lenniük, a hibás HTML duplikátumokat tartalmazhat. A `querySelector` az első egyezést adja vissza. Az összes egyezés feldolgozásához használja a `querySelectorAll`-t és iteráljon a kapott `NodeList`-en. + +```java +NodeList list = document.querySelectorAll("#myDiv"); +for (int i = 0; i < list.getLength(); i++) { + Element el = (Element) list.item(i); + // repeat style extraction for each element +} +``` + +### Különböző CSS tulajdonságok +A **extract css from html**-t a háttérszínen túl egyszerűen a megfelelő getter hívásával a `StyleDeclaration`-on végezheti el. Gyakori getterek: + +* `computedStyle.getFontSize()` +* `computedStyle.getMarginTop()` +* `computedStyle.getDisplay()` + +Ha egy tulajdonság nincs kifejezetten beállítva, a getter a számított alapértelmezett értéket adja vissza (pl. `display: block` egy `
` esetén). + +### Böngésző‑specifikus előtagok +Az Aspose.HTML normalizálja a gyártó‑előtaggal ellátott tulajdonságokat (pl. `-webkit-transform`) a szabványos megfelelőikre, ha lehetséges. Ha a nyers értékre van szüksége, közvetlenül lekérdezheti a `StyleDeclaration` térképet: + +```java +String webkitTransform = computedStyle.getPropertyValue("-webkit-transform"); +``` + +--- + +## Teljesen futtatható példa + +Az alábbi önálló Java osztály összekapcsolja az összes lépést. Cserélje le a `YOUR_DIRECTORY/input.html`-t a HTML fájl elérési útjára. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; +import com.aspose.html.css.StyleDeclaration; + +public class CssExtraction { + public static void main(String[] args) throws Exception { + // Step 1: Load the HTML document + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Locate the element with the desired ID + Element divElement = document.querySelector("#myDiv"); + if (divElement == null) { + System.err.println("Element with id 'myDiv' not found."); + return; + } + + // Step 3: Retrieve the computed CSS style for the element + StyleDeclaration computedStyle = divElement.getComputedStyle(); + if (computedStyle == null) { + System.err.println("Unable to compute style for the element."); + return; + } + + // Step 4: Access a specific CSS property (e.g., background color) and display it + String backgroundColor = computedStyle.getBackgroundColor(); + System.out.println("Background color: " + backgroundColor); + } +} +``` + +**A program futtatása** + +```bash +# Compile +javac -cp "path/to/aspose-html.jar" CssExtraction.java + +# Execute +java -cp ".:path/to/aspose-html.jar" CssExtraction +``` + +A konzolon meg kell jelennie a háttérszínnek, ami megerősíti, hogy sikeresen elvégezte a **how to read css**, **select element by id**, **get computed style**, és **display background color** műveleteket. + +--- + +## Legjobb gyakorlatok (pro tippek) + +* **Cache the `HTMLDocument`** ha sok elemtől kell CSS-t olvasni; a fájl ismételt beolvasása rontja a teljesítményt. +* **Validate the HTML** betöltés előtt – a hibás markup hiányzó csomópontokhoz vagy helytelen számított értékekhez vezethet. +* **Use try‑with‑resources** (vagy explicit `dispose`) a natív erőforrások felszabadításához, amelyeket az Aspose.HTML objektumok tartanak. +* **Log the full `StyleDeclaration`** összetett stílusok hibakeresésekor: `System.out.println(computedStyle.getCssText());` egy pillanatképet ad minden számított tulajdonságról. + +--- + +## Következtetés + +Most már tudja, hogyan **read CSS**-t olvassunk be egy HTML fájlból Java-ban az Aspose.HTML segítségével. A dokumentum betöltésével, **selecting element by id**, **getting computed style**, és a **background‑color** tulajdonság kinyerésével programozottan ellenőrizheti a böngésző által alkalmazott bármely stílusinformációt. + +Innen tovább bővítheti a megoldást más CSS attribútumok kinyerésére, több elem kezelésére, vagy az adatok UI‑teszt keretrendszerbe való integrálására. + +Boldog kódolást, és nyugodtan kísérletezzen különböző szelektorokkal és stílus tulajdonságokkal, hogy megfeleljenek projektje igényeinek! + +## Mit érdemes következőként megtanulni? + +Az alábbi oktatóanyagok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás teljesen működő kódpéldákat tartalmaz lépésről‑lépésre magyarázatokkal, hogy segítsen elsajátítani további API funkciókat és alternatív megvalósítási megközelítéseket saját projektjeiben. + +- [How to Get CSS in Java – Retrieve Computed Style with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-get-css-in-java-retrieve-computed-style-with-aspose-h/) +- [how to read css in Java – Complete Guide with Aspose.HTML](/html/english/java/css-html-form-editing/how-to-read-css-in-java-complete-guide-with-aspose-html/) +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/hungarian/java/editing-html-documents/_index.md b/html/hungarian/java/editing-html-documents/_index.md index e92925655c..40a8544dd5 100644 --- a/html/hungarian/java/editing-html-documents/_index.md +++ b/html/hungarian/java/editing-html-documents/_index.md @@ -66,6 +66,8 @@ Ismerje meg, hogyan adhat hozzá új elemet a HTML body részéhez Java-ban az A Ismerje meg, hogyan módosíthatja az MHTML fájlok h1 címkéjének szövegét Java segítségével részletes, lépésről‑lépésre útmutatóval. ### [Új HTML elem létrehozása Java-val – Teljes Aspose.HTML útmutató](./create-new-html-element-with-java-full-aspose-html-guide/) Ismerje meg, hogyan hozhat létre új HTML elemet Java segítségével az Aspose.HTML teljes útmutatójában. +### [Hogyan változtassuk meg a háttérszínt JavaScript-ben Java-val](./how-to-change-background-color-javascript-using-java/) +Ismerje meg, hogyan módosíthatja a HTML elemek háttérszínét JavaScript kóddal Java környezetben. {{< /blocks/products/pf/tutorial-page-section >}} diff --git a/html/hungarian/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md b/html/hungarian/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md new file mode 100644 index 0000000000..4438c243ea --- /dev/null +++ b/html/hungarian/java/editing-html-documents/how-to-change-background-color-javascript-using-java/_index.md @@ -0,0 +1,247 @@ +--- +category: general +date: 2026-09-29 +description: Háttérszín változtatása JavaScript segítségével egy HTML-fájlban Java + használatával. Tanulja meg, hogyan töltsön be HTML-t Java-ban, futtassa a JS-t a + HTML-ben, és módosítsa a HTML-t Java-val egy új oldal háttéréhez. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- change background color javascript +- load html in java +- run js in html +- modify html with java +- set page background +language: hu +lastmod: 2026-09-29 +og_description: Háttérszín módosítása JavaScript-tel egy HTML oldalon Java használatával. + Ez az útmutató megmutatja, hogyan töltsünk be HTML-t Java-ban, futtassunk JS-t HTML-ben, + és állítsuk be programozottan az oldal háttérszínét. +og_image_alt: Screenshot of Java code that changes the page background color +og_title: Háttérszín változtatása JavaScript-tel Java segítségével – lépésről lépésre + útmutató +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Change background color javascript in an HTML file using Java. Learn + to load html in java, run js in html, and modify html with java for a new page + background. + headline: How to change background color javascript using Java + type: TechArticle +tags: +- Java +- HTMLUnit +- JavaScript +- HTML manipulation +title: Hogyan változtassuk meg a háttérszínt JavaScript-ben Java használatával +url: /hu/java/editing-html-documents/how-to-change-background-color-javascript-using-java/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Hogyan változtassuk meg a háttérszínt JavaScript‑ben Java használatával + +Ha egy meglévő HTML fájlban **change background color javascript**‑t szeretnél módosítani, teljesen Java‑ból megteheted böngésző megnyitása nélkül. Ez a tutorial bemutatja, hogyan **load html in java**, egy kis JavaScript kódrészletet hajts végre, majd **modify html with java**, hogy az oldal háttérszíne frissüljön. + +A megoldás az nyílt forráskódú **HTMLUnit** könyvtárral működik, amely egy fej nélküli böngészőt biztosít, ami a JavaScript‑et pontosan úgy értékeli, mint egy valódi böngésző. A útmutató végére egy újrahasználható metódust kapsz, amely **sets page background**‑t bármilyen általad választott színre. + +## Előfeltételek + +| Szükséges | Miért fontos | +|---------------|----------------| +| Java 8 or newer | A HTMLUnit legalább Java 8-at igényel. | +| Maven or Gradle build tool | A HTMLUnit függőség automatikus lekéréséhez. | +| An HTML file you want to edit (e.g., `input.html`) | A forrásdokumentum, amelyet be fogunk tölteni és módosítani. | + +Add HTMLUnit to your project: + +*Maven* + +```xml + + net.sourceforge.htmlunit + htmlunit + 2.71.0 + +``` + +*Gradle* + +```gradle +implementation 'net.sourceforge.htmlunit:htmlunit:2.71.0' +``` + +> **Pro tip:** Használd a HTMLUnit legújabb stabil verzióját a legpontosabb JavaScript motorért. + +## Change background color javascript – HTML betöltése Java‑ban + +Az első lépés, hogy betöltsük a HTML dokumentumot egy `HTMLPage` objektumba. Ez egy DOM‑szerű API‑t és egy JavaScript végrehajtási kontextust biztosít. + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; + +public class BackgroundColorChanger { + + /** + * Loads an HTML file from the given path. + * + * @param htmlPath absolute or relative path to the source HTML file + * @return HtmlPage representing the loaded document + * @throws IOException if the file cannot be read + */ + private static HtmlPage loadHtml(String htmlPath) throws IOException { + // WebClient acts as a headless browser; disabling CSS speeds up loading. + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + + // Convert the file path to a URL that HTMLUnit can understand. + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } +} +``` + +*Why this matters*: `WebClient` egy sandbox környezetet hoz létre, ahol a JavaScript futtatható, így **run js in html**‑t pontosan úgy tudod végrehajtani, ahogy egy felhasználó böngészője. + +## Run js in html a page background beállításához + +Miután az oldal betöltődött, bármely JavaScript kifejezést kiértékelhetsz. Az alábbi kódrészlet megváltoztatja a `` elem `backgroundColor` stílusát. + +```java +/** + * Executes JavaScript that changes the page background color. + * + * @param page the HtmlPage loaded earlier + * @param color any valid CSS color string, e.g., "lightblue" or "#ffcc00" + */ +private static void changeBackground(HtmlPage page, String color) { + // The eval method runs JavaScript in the page's context. + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); +} +``` + +*Magyarázat*: +- `document.body.style.backgroundColor` a szabványos DOM tulajdonság az oldal háttérszínéhez. +- `eval` hívásával **run js in html**-t hajtunk végre anélkül, hogy valódi böngészőablakra lenne szükség. +- A metódus újrahasználható bármilyen színhez, ezáltal teljesíti a **set page background** követelményt. + +## Modify html with java és az eredmény mentése + +A szkript futása után a DOM tükrözi az új stílust. Most már visszaírhatod a frissített HTML‑t a lemezre. + +```java +import java.nio.file.Files; +import java.nio.file.Paths; + +/** + * Saves the modified HTML content to a new file. + * + * @param page the HtmlPage that has been altered + * @param outputPath destination file path + * @throws IOException if writing fails + */ +private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + // page.asXml() returns the current HTML markup, including the changed style. + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); +} +``` + +Az összes összetevő egyesítése egyetlen, futtatható programot eredményez: + +```java +import com.gargoylesoftware.htmlunit.WebClient; +import com.gargoylesoftware.htmlunit.html.HtmlPage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +public class BackgroundColorChanger { + + public static void main(String[] args) { + // Adjust these paths for your environment. + String inputFile = "YOUR_DIRECTORY/input.html"; + String outputFile = "YOUR_DIRECTORY/js_modified.html"; + String newColor = "lightblue"; // Change to any CSS color you need. + + try { + HtmlPage page = loadHtml(inputFile); + changeBackground(page, newColor); + saveModifiedHtml(page, outputFile); + System.out.println("Background color changed to '" + newColor + "' and saved to " + outputFile); + } catch (IOException e) { + System.err.println("Error processing HTML file: " + e.getMessage()); + } + } + + private static HtmlPage loadHtml(String htmlPath) throws IOException { + WebClient webClient = new WebClient(); + webClient.getOptions().setCssEnabled(false); + webClient.getOptions().setJavaScriptEnabled(true); + File file = new File(htmlPath); + return webClient.getPage(file.toURI().toURL()); + } + + private static void changeBackground(HtmlPage page, String color) { + String script = "document.body.style.backgroundColor = '" + color + "';"; + page.getEnclosingWindow().getScriptableObject().eval(script); + } + + private static void saveModifiedHtml(HtmlPage page, String outputPath) throws IOException { + String updatedHtml = page.asXml(); + Files.write(Paths.get(outputPath), updatedHtml.getBytes()); + } +} +``` + +### Várható kimenet + +A program futtatása kiírja: + +``` +Background color changed to 'lightblue' and saved to YOUR_DIRECTORY/js_modified.html +``` + +`js_modified.html` megnyitása bármely böngészőben egy világoskék háttérrel jeleníti meg az oldalt, ami megerősíti, hogy a **change background color javascript** művelet sikeres volt. + +## Gyakori variációk és szélsőséges esetek + +| Helyzet | Hogyan kezelhető | +|-----------|------------------| +| **Different color formats** | Adj meg bármilyen CSS‑kompatibilis értéket (`"red"`, `"#ff0000"`, `"rgb(255,0,0)"`). | +| **Missing `` tag** | A szkript csendben hibát fog jelezni; először ellenőrizheted, hogy `` létezik-e a `page.getFirstByXPath("//body")` segítségével. | +| **Large HTML files** | Kapcsold ki a CSS‑t (`setCssEnabled(false)`) és csak a szükséges JavaScript funkciókat engedélyezd a memóriahasználat csökkentése érdekében. | +| **Running multiple scripts** | Hívd meg többször a `changeBackground`‑t, vagy hozz létre egy segédmetódust, amely JavaScript parancsok listáját fogadja. | + +## Összegzés + +Most már tudod, hogyan **change background color javascript** egy HTML fájl Java‑ban történő betöltésével, **run js in html**, és **modify html with java**, hogy **set page background**‑t bármilyen általad választott színre állítsd. A fenti teljes példa a legújabb HTMLUnit könyvtárral működik, és beépíthető nagyobb automatizálási folyamatokba, például HTML jelentések kötegelt feldolgozásába vagy e‑mail sablonok előkészítésébe. + +**Next steps** +- Fedezd fel a többi DOM manipulációt (pl. elemek beszúrása, szkriptek eltávolítása). +- Kombináld ezt a megközelítést egy PDF renderelővel, hogy a stílusos oldalakról PDF‑eket generálj. +- Próbálj ki egy másik fej nélküli motorot, például a Selenium WebDriver‑t, ha teljes böngésző‑hűséget igényelsz. + +Boldog kódolást! + +## Mit érdemes legközelebb megtanulni? + +A következő tutorialok szorosan kapcsolódó témákat fednek le, amelyek a jelen útmutatóban bemutatott technikákra épülnek. Minden forrás tartalmaz teljes, működő kódrészleteket lépésről‑lépésre magyarázatokkal, hogy segítsenek további API‑funkciók elsajátításában és alternatív megvalósítási megközelítések felfedezésében a saját projektjeidben. + +- [Get Computed Style Java – Extract Background Color from HTML](/html/english/java/css-html-form-editing/get-computed-style-java-extract-background-color-from-html/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Generate HTML from JavaScript in Java – Complete Step‑by‑Step Guide](/html/english/java/creating-managing-html-documents/generate-html-from-javascript-in-java-complete-step-by-step/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/java/configuring-environment/_index.md b/html/indonesian/java/configuring-environment/_index.md index 1080695367..179085f491 100644 --- a/html/indonesian/java/configuring-environment/_index.md +++ b/html/indonesian/java/configuring-environment/_index.md @@ -122,6 +122,9 @@ Pelajari cara membuat sandbox Aspose HTML secara menyeluruh di Java untuk mengam ### [Set User Style Sheet in Aspose.HTML for Java](./set-user-style-sheet/) Pelajari cara mengatur stylesheet pengguna khusus di Aspose.HTML untuk Java, meningkatkan gaya dokumen Anda dan mengonversi HTML ke PDF dengan mudah. +### [Atur agen pengguna khusus dan dimensi layar di Aspose.HTML untuk Java](./set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/) +Pelajari cara mengatur user agent khusus dan ukuran layar untuk konversi HTML yang akurat. + --- **Terakhir Diperbarui:** 2025-12-03 diff --git a/html/indonesian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md b/html/indonesian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md new file mode 100644 index 0000000000..ff48f3d42d --- /dev/null +++ b/html/indonesian/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/_index.md @@ -0,0 +1,191 @@ +--- +category: general +date: 2026-09-29 +description: Atur agen pengguna khusus di Aspose.HTML untuk Java dan pelajari cara + mengatur ukuran layar virtual untuk rendering HTML yang akurat. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- set custom user agent +- set virtual screen size +- specify user agent +- set screen dimensions +- set screen width +language: id +lastmod: 2026-09-29 +og_description: Atur agen pengguna khusus di Aspose.HTML untuk Java dan pelajari cara + mengatur ukuran layar virtual untuk rendering HTML yang akurat. +og_image_alt: Diagram showing how to set custom user agent and screen dimensions in + a Java sandbox +og_title: Atur agen pengguna khusus dan dimensi layar di Aspose.HTML untuk Java +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Set custom user agent in Aspose.HTML for Java and learn how to set + virtual screen size for accurate HTML rendering. + headline: Set custom user agent and screen dimensions in Aspose.HTML for Java + type: TechArticle +tags: +- Aspose.HTML +- Java +- sandbox +- user agent +- screen size +title: Atur agen pengguna khusus dan dimensi layar di Aspose.HTML untuk Java +url: /id/java/configuring-environment/set-custom-user-agent-and-screen-dimensions-in-aspose-html-f/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Atur agen pengguna khusus dan dimensi layar di Aspose.HTML untuk Java + +Jika Anda perlu **set custom user agent** saat merender HTML dengan Aspose.HTML untuk Java, panduan ini menunjukkan secara tepat cara melakukannya. Dengan mengonfigurasi sandbox Anda juga mendapatkan kemampuan untuk **set virtual screen size**, memastikan tata letak cocok dengan viewport browser nyata. + +Anda akan menyelesaikan tutorial ini dengan program lengkap yang dapat dijalankan yang **specifies user agent**, **sets screen width**, dan **sets screen height**. Tidak diperlukan alat eksternal—hanya Aspose.HTML untuk Java dan runtime Java 8+. + +## Apa yang akan Anda pelajari + +* Cara membuat `SandboxConfiguration` untuk mengisolasi proses rendering. +* Cara **set custom user agent** dan mengapa hal ini penting untuk halaman responsif. +* Cara **set virtual screen size** (lebar dan tinggi layar) untuk tata letak yang akurat. +* Cara memuat file HTML di dalam sandbox dan menyimpan hasil yang diproses. +* Kesulitan umum dan tip praktik terbaik untuk rendering dalam sandbox. + +> **Prerequisites** – Anda memerlukan lisensi Aspose.HTML untuk Java yang valid, Java 8 atau lebih baru, dan sebuah IDE (IntelliJ IDEA, Eclipse, atau VS Code). Contoh ini menggunakan file lokal `input.html`, tetapi URL apa pun yang dapat dijangkau juga dapat digunakan. + +![Sandbox flow diagram](sandbox-flow.png "set custom user agent example in Java") + +## Langkah 1: Buat konfigurasi sandbox (dasar) + +Sandbox mengisolasi lingkungan rendering dari JVM host, yang penting ketika Anda ingin **set custom user agent** atau mengubah ukuran viewport. + +```java +import com.aspose.html.sandbox.SandboxConfiguration; + +// Create a fresh sandbox configuration object +SandboxConfiguration sandboxConfig = new SandboxConfiguration(); +``` + +*Mengapa langkah ini?* +`SandboxConfiguration` menyimpan semua opsi rendering, termasuk **screen dimensions** dan string **user‑agent**. Dengan mengonfigurasikannya sebelum memuat dokumen, Anda menjamin mesin HTML menghormati pengaturan tersebut sejak permintaan pertama. + +## Langkah 2: Atur dimensi layar untuk meniru perangkat nyata + +Situs responsif sering membaca `window.innerWidth` dan `window.innerHeight`. Agar mesin berpikir berjalan pada layar 1024 × 768, Anda **set virtual screen size**: + +```java +// Define the virtual screen size for the sandboxed document +sandboxConfig.setScreenWidth(1024); // set screen width +sandboxConfig.setScreenHeight(768); // set screen height +``` + +*Mengapa ini penting* – Jika Anda melewatkan **set screen dimensions**, renderer mungkin menggunakan viewport yang sangat kecil, sehingga kueri media CSS memilih tata letak seluler. Dengan secara eksplisit **set screen width** dan **set screen height**, Anda mengontrol aturan CSS mana yang diaktifkan. + +## Langkah 3: Tentukan string user‑agent khusus + +Beberapa halaman web menyajikan konten berbeda berdasarkan header user‑agent. Untuk **specify user agent** Anda cukup mengaturnya pada konfigurasi sandbox: + +```java +// Set a custom user‑agent string that will be sent during resource loading +sandboxConfig.setUserAgent("AsposeHTML/1.0"); +``` + +*Mengapa menggunakan user agent khusus?* +String khusus dapat melewati deteksi bot, memicu fitur hanya desktop, atau menguji bagaimana situs berperilaku untuk versi browser tertentu. Mesin Aspose meneruskan nilai ini pada setiap permintaan HTTP yang dibuat saat memuat sumber daya eksternal (CSS, gambar, skrip). + +## Langkah 4: Muat dokumen HTML di dalam sandbox + +Sekarang sandbox sudah sepenuhnya dikonfigurasi, muat file HTML. Konstruktor yang menerima jalur file dan `SandboxConfiguration` secara otomatis menerapkan semua pengaturan yang telah kita definisikan. + +```java +import com.aspose.html.HTMLDocument; + +// Load the HTML file using the previously configured sandbox +HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); +``` + +Jika Anda perlu memuat dari URL remote, ganti jalur file dengan string URL—Aspose.HTML tetap akan menghormati **set custom user agent** dan **screen dimensions**. + +## Langkah 5: Simpan output yang telah diproses + +Setelah dokumen selesai dimuat, Anda dapat menyimpannya dalam format apa pun yang didukung. Di sini kami menulis file HTML yang berada dalam sandbox dan mencerminkan perubahan DOM apa pun yang disebabkan oleh pengaturan khusus. + +```java +// Save the processed document to the desired output location +document.save("YOUR_DIRECTORY/sandboxed_output.html"); +``` + +File yang disimpan akan berisi markup yang sama, tetapi skrip apa pun yang menanyakan `navigator.userAgent` atau memeriksa `window.innerWidth` kini akan melihat nilai yang Anda berikan. + +## Contoh lengkap yang dapat dijalankan + +Menggabungkan semua langkah memberikan Anda program mandiri yang dapat Anda salin, tempel, dan jalankan. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.sandbox.SandboxConfiguration; + +public class SandboxDemo { + public static void main(String[] args) throws Exception { + // Step 1: Create a sandbox configuration to isolate the rendering environment + SandboxConfiguration sandboxConfig = new SandboxConfiguration(); + + // Step 2: Define the virtual screen size for the sandboxed document + sandboxConfig.setScreenWidth(1024); // set screen width + sandboxConfig.setScreenHeight(768); // set screen height + + // Step 3: Set a custom user‑agent string to be used during loading + sandboxConfig.setUserAgent("AsposeHTML/1.0"); // set custom user agent + + // Step 4: Load the HTML document within the sandbox using the configuration + HTMLDocument document = new HTMLDocument("YOUR_DIRECTORY/input.html", sandboxConfig); + + // Step 5: Save the processed document to the desired output location + document.save("YOUR_DIRECTORY/sandboxed_output.html"); + } +} +``` + +### Output yang diharapkan + +Menjalankan program akan membuat `sandboxed_output.html`. Jika Anda membukanya di browser dan memeriksa `navigator.userAgent` melalui konsol, Anda akan melihat **AsposeHTML/1.0**. Begitu pula, `window.innerWidth` akan melaporkan **1024**, mengonfirmasi bahwa **set screen dimensions** berfungsi sebagaimana mestinya. + +## Pertanyaan umum & penanganan kasus tepi + +| Pertanyaan | Jawaban | +|------------|---------| +| **Bagaimana jika halaman memuat sumber daya tambahan dari domain berbeda?** | Sandbox meneruskan **custom user agent** pada setiap permintaan, tetapi kebijakan lintas‑origin tetap berlaku. Gunakan `sandboxConfig.setAllowCrossDomain(true)` jika Anda perlu melonggarkan pembatasan tersebut. | +| **Apakah saya dapat mengubah ukuran layar setelah dokumen dimuat?** | Tidak. Dimensi layar dibaca selama proses layout awal. Untuk merender dengan ukuran berbeda, buat `SandboxConfiguration` baru dan muat ulang dokumen. | +| **Apakah saya perlu memanggil `document.close()`?** | `HTMLDocument` mengimplementasikan `AutoCloseable`. Menggunakan blok try‑with‑resources memastikan pembersihan yang tepat, tetapi pemanggilan `close()` secara eksplisit bersifat opsional dalam skrip sederhana. | +| **Bagaimana perbedaannya dengan mengatur user‑agent pada klien HTTP?** | Mengatur user‑agent pada sandbox memengaruhi **all** permintaan sumber daya yang dibuat oleh mesin HTML, bukan hanya pengambilan HTML awal. Ini meniru perilaku browser nyata dengan lebih akurat. | +| **Apakah sandbox aman untuk HTML yang tidak terpercaya?** | Ya. Sandbox mengisolasi akses sistem file dan membatasi panggilan jaringan sesuai konfigurasi, sehingga mengurangi risiko skrip berbahaya memengaruhi JVM host Anda. | + +## Pro tips + +* **Reuse configurations** – Jika Anda merender banyak halaman dengan viewport yang sama, buat satu `SandboxConfiguration` dan gunakan kembali untuk menghindari overhead pembuatan objek. +* **Debug with logging** – Aktifkan logging Aspose.HTML (`sandboxConfig.setLogLevel(LogLevel.DEBUG)`) untuk melihat sumber daya mana yang diambil dengan **custom user‑agent**. +* **Combine with CSS media queries** – Dengan menyesuaikan **set screen width** Anda dapat menguji bagaimana desain responsif Anda berperilaku pada tablet, ponsel, atau desktop besar tanpa membuka browser nyata. + +## Kesimpulan + +Anda kini tahu cara **set custom user agent** dan **set screen dimensions** saat merender HTML dengan Aspose.HTML untuk Java. Dengan mengonfigurasi sandbox, Anda mengisolasi lingkungan, mengontrol viewport, dan memastikan sumber daya eksternal melihat header tepat yang Anda tentukan. Teknik ini penting untuk menguji tata letak responsif, melewati pemblokiran bot, atau mereproduksi fitur hanya desktop dalam pipeline otomatis. + +Selanjutnya, Anda mungkin ingin menjelajahi **how to set custom cookies** atau **capture rendered screenshots** menggunakan API rendering Aspose.HTML—kedua konsep tersebut dibangun di atas pola konfigurasi sandbox yang baru saja Anda kuasai. + +Selamat mengoding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber daya menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [High DPI Rendering in Java – Capture Webpage Screenshots with Custom User Agent](/html/english/java/conversion-html-to-various-image-formats/high-dpi-rendering-in-java-capture-webpage-screenshots-with/) +- [How to Load HTML, Set Device DPI & Read Background Color](/html/english/java/advanced-usage/how-to-load-html-set-device-dpi-read-background-color/) +- [Create HTML File Java & Set Up Network Service (Aspose.HTML)](/html/english/java/configuring-environment/setup-network-service/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/java/creating-managing-html-documents/_index.md b/html/indonesian/java/creating-managing-html-documents/_index.md index 54b04a1f1d..f9a8d71a03 100644 --- a/html/indonesian/java/creating-managing-html-documents/_index.md +++ b/html/indonesian/java/creating-managing-html-documents/_index.md @@ -62,6 +62,8 @@ Pelajari cara mengambil data JSON dan menghasilkan konten HTML secara dinamis me Temukan cara mudah memuat dokumen HTML dari URL di Java dengan Aspose.HTML. Tutorial langkah demi langkah disertakan. ### [Memuat Dokumen HTML Java – Panduan Lengkap dengan XPath & CSS](./load-html-document-java-complete-guide-with-xpath-css/) Pelajari cara memuat dokumen HTML di Java dengan Aspose.HTML, lengkap dengan contoh penggunaan XPath dan CSS untuk manipulasi yang kuat. +### [Cara menghitung elemen HTML di Java dengan XPath](./how-to-count-html-elements-in-java-with-xpath/) +Pelajari cara menghitung elemen HTML di Java menggunakan XPath dengan Aspose.HTML dalam panduan langkah demi langkah. ### [Hasilkan Dokumen HTML Baru menggunakan Aspose.HTML untuk Java](./generate-new-html-documents/) Pelajari cara membuat dokumen HTML baru menggunakan Aspose.HTML untuk Java dengan panduan langkah demi langkah yang mudah ini. Mulai buat konten HTML yang dinamis. ### [Menangani Peristiwa Pemuatan Dokumen di Aspose.HTML untuk Java](./handle-document-load-events/) @@ -72,12 +74,17 @@ Pelajari cara membuat dan mengelola dokumen SVG menggunakan Aspose.HTML untuk Ja Pelajari cara membuat sandbox HTML di Java dengan panduan langkah demi langkah untuk pengujian dan pengembangan yang aman. ### [Ekstrak Teks dari HTML di Java – Panduan Pemrograman Lengkap](./extract-text-from-html-in-java-complete-programming-guide/) Pelajari cara mengekstrak teks dari dokumen HTML menggunakan Aspose.HTML untuk Java dengan panduan langkah demi langkah yang lengkap. +### [Cara membuat elemen HTML di Java menggunakan Aspose.HTML](./how-to-create-html-element-in-java-using-aspose-html/) +Pelajari cara membuat elemen HTML di Java menggunakan Aspose.HTML dengan panduan langkah demi langkah yang jelas. ### [Cara Menanyakan HTML di Java – Tutorial Lengkap](./how-to-query-html-in-java-complete-tutorial/) ### [Cara Mengurai HTML di Java – Memuat, Menanyakan & Menghitung Elemen](./how-to-parse-html-java-load-query-count-elements/) ### [Jalankan JavaScript Asinkron di Java – Panduan Lengkap Langkah‑per‑Langkah](./execute-async-javascript-in-java-complete-step-by-step-guide/) ### [Menghitung Karakter HTML di Java – Panduan Lengkap dengan Aspose HTML](./count-html-characters-in-java-full-guide-with-aspose-html/) Pelajari cara menghitung jumlah karakter HTML dalam dokumen menggunakan Aspose.HTML untuk Java dengan panduan langkah demi langkah. +### [Cara memilih elemen berdasarkan kelas di Java menggunakan querySelectorAll](./how-to-select-elements-by-class-in-java-using-queryselectora/) +Pelajari cara memilih elemen HTML berdasarkan kelas di Java menggunakan querySelectorAll dengan Aspose.HTML. + {{< /blocks/products/pf/tutorial-page-section >}} {{< /blocks/products/pf/main-container >}} @@ -111,4 +118,4 @@ Pelajari cara mengekstrak teks dari dokumen HTML menggunakan Aspose.HTML untuk J {{< /blocks/products/pf/main-container >}} {{< /blocks/products/pf/main-wrap-class >}} -{{< blocks/products/products-backtop-button >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md b/html/indonesian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md new file mode 100644 index 0000000000..8f56a49120 --- /dev/null +++ b/html/indonesian/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/_index.md @@ -0,0 +1,216 @@ +--- +category: general +date: 2026-09-29 +description: Pelajari cara menghitung elemen HTML dalam Java menggunakan Aspose.HTML + dan XPath. Panduan ini menunjukkan cara memuat dokumen HTML, memilih node dengan + XPath, dan mendapatkan daftar node. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- how to count html elements +- select nodes with xpath +- get node list java +- load html document java +- evaluate xpath in java +language: id +lastmod: 2026-09-29 +og_description: Cara menghitung elemen HTML di Java menggunakan Aspose.HTML. Ikuti + tutorial lengkap ini untuk memuat dokumen HTML, memilih node dengan XPath, mengevaluasi + XPath di Java, dan mendapatkan daftar node. +og_image_alt: Screenshot of Java code that counts HTML elements using XPath +og_title: Cara menghitung elemen HTML di Java – panduan langkah demi langkah +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + headline: How to count HTML elements in Java with XPath + type: TechArticle +- description: Learn how to count HTML elements in Java using Aspose.HTML and XPath. + This guide shows how to load an HTML document, select nodes with XPath, and get + a node list. + name: How to count HTML elements in Java with XPath + steps: + - name: Load the HTML document in Java + text: First, bring the HTML file into memory. The `HTMLDocument` class parses + the file and builds a DOM tree that XPath can query. + - name: Create and evaluate an XPath expression + text: Now we build an XPath that selects the elements we want to count. In this + example we count all `` tags whose `alt` attribute equals `"logo"`. + - name: Retrieve and count the node list + text: Finally, we count how many nodes were returned. The `NodeList` API provides + `getLength()` for this purpose. + - name: Full runnable example + text: Below is the complete program, including all imports and a minimal `main` + method. Copy it into a file named `CountHtmlElements.java`, add the Aspose.HTML + JAR to your project, and run it. + type: HowTo +tags: +- Java +- XPath +- Aspose.HTML +title: Cara menghitung elemen HTML dalam Java dengan XPath +url: /id/java/creating-managing-html-documents/how-to-count-html-elements-in-java-with-xpath/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara menghitung elemen HTML di Java dengan XPath + +Jika Anda perlu **menghitung elemen HTML** di sebuah halaman web dari aplikasi Java, panduan ini memberikan solusi lengkap yang siap dijalankan. Pada akhir dua kalimat pertama Anda akan tahu persis cara memuat dokumen HTML, memilih node dengan XPath, dan mengambil daftar node yang dapat Anda hitung. + +Kami akan menggunakan pustaka Aspose.HTML for Java karena menyediakan API yang kompatibel dengan DOM dan mesin XPath yang kuat. Tutorial ini mencakup semua yang Anda butuhkan—import, kode, penjelasan, dan output yang diharapkan—sehingga Anda dapat menyalin contoh ke dalam proyek Anda dan melihat hasilnya secara langsung. Sepanjang tutorial kami juga akan menyentuh **select nodes with XPath**, **get node list Java**, **load HTML document Java**, dan **evaluate XPath in Java**. + +## Apa yang akan Anda capai + +* Memuat file HTML dari sistem file. +* Membuat ekspresi XPath yang menargetkan elemen tertentu. +* Mengevaluasi ekspresi XPath terhadap dokumen. +* Mengambil `NodeList` dan menghitung berapa banyak elemen yang cocok. + +Tidak diperlukan layanan eksternal atau konfigurasi yang rumit; hanya JAR Aspose.HTML di classpath Anda. + +--- + +## Cara menghitung elemen HTML dengan XPath di Java + +Bagian langkah‑demi‑langkah ini menunjukkan kode tepat yang Anda butuhkan. Setiap subbagian sesuai dengan bagian logis proses, memudahkan penyesuaian atau perluasan. + +### Langkah 1: Memuat dokumen HTML di Java + +Pertama, bawa file HTML ke memori. Kelas `HTMLDocument` mem-parsing file dan membangun pohon DOM yang dapat di‑query oleh XPath. + +```java +import com.aspose.html.dom.HTMLDocument; + +// Load the HTML document from the local file system +HTMLDocument doc = new HTMLDocument("input.html"); +``` + +**Mengapa ini penting:** +Memuat dokumen membuat representasi DOM, yang diperlukan untuk evaluasi XPath apa pun. Jika jalur file salah, Aspose.HTML akan melempar `FileNotFoundException`, jadi periksa kembali lokasi `input.html`. + +### Langkah 2: Membuat dan mengevaluasi ekspresi XPath + +Sekarang kami membuat XPath yang memilih elemen yang ingin dihitung. Dalam contoh ini kami menghitung semua tag `` yang atribut `alt`‑nya sama dengan "logo". + +```java +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; +import com.aspose.html.dom.NodeList; + +// Build the XPath expression +XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + +// Evaluate the expression against the document +NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); +``` + +**Mengapa ini penting:** +Ekspresi `//img[@alt='logo']` adalah cara singkat untuk **select nodes with XPath**. Pemanggilan `evaluate` **evaluate XPath in Java** dan mengembalikan `XPathResult` generik. Casting ke `NodeList` memberi kami akses langsung ke koleksi node yang cocok. + +### Langkah 3: Mengambil dan menghitung daftar node + +Akhirnya, kami menghitung berapa banyak node yang dikembalikan. API `NodeList` menyediakan `getLength()` untuk tujuan ini. + +```java +// Output the number of matching elements +System.out.println("Found " + nodes.getLength() + " logo images."); +``` + +**Mengapa ini penting:** +`getLength()` adalah cara paling sederhana untuk **get node list Java** dan memperoleh hitungan. Jika XPath tidak menemukan elemen apa pun, panjangnya akan menjadi `0`, yang dapat ditangani aplikasi Anda dengan baik. + +### Contoh lengkap yang dapat dijalankan + +Berikut adalah program lengkap, termasuk semua import dan metode `main` minimal. Salin ke dalam file bernama `CountHtmlElements.java`, tambahkan JAR Aspose.HTML ke proyek Anda, dan jalankan. + +```java +import com.aspose.html.dom.HTMLDocument; +import com.aspose.html.dom.NodeList; +import com.aspose.html.dom.xpath.XPathExpression; +import com.aspose.html.dom.xpath.XPathResult; + +public class CountHtmlElements { + public static void main(String[] args) { + // Step 1: Load the HTML document + HTMLDocument doc = new HTMLDocument("input.html"); + + // Step 2: Create an XPath expression to select elements with alt='logo' + XPathExpression expr = doc.createXPathExpression("//img[@alt='logo']"); + + // Step 3: Evaluate the expression and obtain the matching nodes + NodeList nodes = (NodeList) expr.evaluate(doc, XPathResult.ANY_TYPE); + + // Step 4: Output the number of logo images found + System.out.println("Found " + nodes.getLength() + " logo images."); + } +} +``` + +**Output yang diharapkan** + +Jika `input.html` berisi tiga tag `logo`, program akan mencetak: + +``` +Found 3 logo images. +``` + +Jika tidak ada gambar seperti itu, program mencetak: + +``` +Found 0 logo images. +``` + +--- + +## Variasi umum dan kasus tepi + +| Situasi | Apa yang diubah | Alasan | +|-----------|----------------|--------| +| Menghitung elemen berbeda (misalnya `
` dengan kelas `header`) | Ubah XPath menjadi `//div[@class='header']` | Sintaks XPath memungkinkan Anda menargetkan tag/atribut apa pun. | +| Menghitung semua elemen terlepas dari atribut | Gunakan `//*` sebagai ekspresi XPath | `//*` memilih setiap node elemen dalam dokumen. | +| Dokumen besar menyebabkan tekanan memori | Gunakan parser streaming atau evaluasi XPath pada fragmen | Aspose.HTML menyediakan `HTMLDocumentFragment` untuk parsing parsial. | +| Membutuhkan node aktual, bukan hanya hitungan | Iterasi melalui `nodes.item(i)` | Anda dapat memproses setiap node setelah menghitung. | + +**Tips profesional:** Selalu validasi string XPath sebelum mengirimkannya ke `createXPathExpression`. Ekspresi tidak valid akan melempar `XPathException`, yang dapat Anda tangkap untuk memberikan pesan error yang ramah. + +--- + +## Daftar periksa pemecahan masalah + +1. **Library tidak ditemukan** – Pastikan JAR Aspose.HTML for Java ada di classpath (`-cp` atau dependensi IDE Anda). +2. **File tidak ditemukan** – Pastikan `input.html` berada relatif terhadap direktori kerja atau gunakan jalur absolut. +3. **Hasil nol** – Periksa kembali nilai atribut dan sensitivitas huruf (`alt='logo'` vs `alt='Logo'`). XPath bersifat case‑sensitive. +4. **Kekhawatiran kinerja** – Gunakan kembali satu instance `HTMLDocument` jika Anda perlu menjalankan banyak query XPath pada file yang sama. + +--- + +## Kesimpulan + +Anda kini tahu **cara menghitung elemen HTML** di Java menggunakan Aspose.HTML dan XPath. Dengan memuat dokumen HTML, membuat ekspresi XPath, **evaluate XPath in Java**, dan mengambil **node list**, Anda dapat dengan cepat menentukan jumlah elemen yang cocok. Teknik ini bekerja untuk tag atau atribut apa pun, menjadikannya alat serbaguna untuk web‑scraping, pengujian otomatis, atau analisis konten. + +Langkah selanjutnya yang dapat Anda jelajahi meliputi: + +* Menggunakan **select nodes with XPath** untuk mengekstrak nilai atribut (misalnya `src` gambar). +* Menggabungkan beberapa query XPath untuk membuat laporan statistik elemen. +* Mengintegrasikan logika ini ke dalam layanan Java yang lebih besar yang memproses file HTML secara massal. + +Silakan bereksperimen dengan ekspresi XPath dan struktur dokumen yang berbeda—menghitung elemen HTML hanyalah permulaan! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik terkait erat yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda. + +- [Cara Mem-parse HTML Java – Memuat, Query & Menghitung Elemen](/html/english/java/creating-managing-html-documents/how-to-parse-html-java-load-query-count-elements/) +- [Cara query HTML di Java – Memilih elemen, filter berdasarkan atribut, dan mendapatkan teks](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Muat Dokumen HTML Java – Panduan Lengkap dengan XPath & CSS](/html/english/java/creating-managing-html-documents/load-html-document-java-complete-guide-with-xpath-css/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md b/html/indonesian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md new file mode 100644 index 0000000000..440bfb5d6c --- /dev/null +++ b/html/indonesian/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/_index.md @@ -0,0 +1,183 @@ +--- +category: general +date: 2026-09-29 +description: Pelajari cara membuat elemen HTML di Java, menambahkan paragraf, mengatur + teksnya, dan menambahkannya ke dalam body dengan Aspose.HTML. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- create html element +- how to add paragraph +- add text to html +- append element to body +- java html example +language: id +lastmod: 2026-09-29 +og_description: Buat elemen HTML di Java dengan menambahkan paragraf, mengatur teksnya, + dan menambahkannya ke dalam body menggunakan Aspose.HTML. +og_image_alt: Screenshot of Java code creating and appending an HTML paragraph element +og_title: Membuat elemen HTML di Java – panduan Aspose.HTML langkah demi langkah +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to create HTML element in Java, add a paragraph, set its + text, and append it to the body with Aspose.HTML. + headline: How to create HTML element in Java using Aspose.HTML + type: TechArticle +tags: +- Aspose.HTML +- Java +- DOM manipulation +title: Cara membuat elemen HTML di Java menggunakan Aspose.HTML +url: /id/java/creating-managing-html-documents/how-to-create-html-element-in-java-using-aspose-html/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara membuat elemen HTML di Java menggunakan Aspose.HTML + +Jika Anda perlu **membuat elemen HTML** dalam aplikasi Java, panduan ini menunjukkan solusi lengkap yang dapat dijalankan. Anda akan melihat cara **menambahkan paragraf**, mengatur teksnya, dan **menambahkan elemen ke body** dari file HTML yang ada dengan Aspose.HTML. + +Tutorial ini mencakup semua hal mulai dari memuat dokumen hingga menyimpan file yang telah dimodifikasi, sehingga Anda dapat menyalin kode ke dalam proyek Anda sendiri tanpa perlu riset lebih lanjut. + +## Prasyarat + +* Java 17 atau yang lebih baru terinstal. +* Aspose.HTML for Java 23.10 (atau versi terbaru) ditambahkan ke classpath proyek Anda. +* File `input.html` sederhana di direktori yang diketahui. File dapat kosong (``) atau berisi markup yang sudah ada. + +## Langkah 1: Muat dokumen HTML yang ada + +Memuat file sumber memberi Anda pohon DOM yang dapat dimanipulasi. + +```java +import com.aspose.html.HTMLDocument; + +// Replace with the actual path to your input file +String inputPath = "YOUR_DIRECTORY/input.html"; +HTMLDocument doc = new HTMLDocument(inputPath); +``` + +Konstruktor `HTMLDocument` mem-parsing file dan membuat DOM yang hidup. Jika file tidak dapat dibaca, Aspose.HTML melempar `IOException`; Anda dapat membiarkan pengecualian tersebut menyebar atau menanganinya dengan blok try‑catch. + +## Langkah 2: Buat elemen `

` baru dan tambahkan teks ke HTML + +Membuat elemen baru mirip dengan menggunakan `document.createElement` di browser. + +```java +import com.aspose.html.dom.Element; + +// Create a

element +Element paragraph = doc.createElement("p"); + +// Set the text node inside the

+paragraph.setTextContent("Added by Aspose.HTML"); +``` + +`setTextContent` secara otomatis membuat node teks dan melampirkannya ke elemen, yang merupakan cara yang disarankan untuk **menambahkan teks ke HTML**. Metode ini juga meng-escape karakter yang dapat merusak markup. + +## Langkah 3: Tambahkan elemen ke body + +Sekarang paragraf sudah siap, Anda perlu menempatkannya di dalam `` dokumen. + +```java +// Append the new paragraph to the element +doc.getBody().appendChild(paragraph); +``` + +`doc.getBody()` mengembalikan node ``, dan `appendChild` menyisipkan `

` baru sebagai child terakhir. Jika dokumen tidak memiliki elemen `` (jarang terjadi pada file HTML yang terstruktur dengan baik), Aspose.HTML akan membuatnya secara otomatis. + +## Langkah 4: Simpan dokumen yang telah dimodifikasi + +Akhirnya, tulis kembali DOM yang diperbarui ke disk. + +```java +// Replace with the desired output path +String outputPath = "YOUR_DIRECTORY/output.html"; +doc.save(outputPath); +``` + +`save` men-serialize DOM, mempertahankan markup yang ada dan menambahkan paragraf baru. `output.html` yang dihasilkan akan berisi: + +```html + + +

Added by Aspose.HTML

+ + +``` + +## Kode sumber lengkap (contoh java html) + +Menggabungkan semua langkah memberikan Anda program mandiri yang dapat langsung dijalankan. + +```java +import com.aspose.html.HTMLDocument; +import com.aspose.html.dom.Element; + +public class DomManipulation { + public static void main(String[] args) throws Exception { + // Step 1: Load the existing HTML document + HTMLDocument doc = new HTMLDocument("YOUR_DIRECTORY/input.html"); + + // Step 2: Create a new

element and set its text + Element paragraph = doc.createElement("p"); + paragraph.setTextContent("Added by Aspose.HTML"); + + // Step 3: Append the new element to the document body + doc.getBody().appendChild(paragraph); + + // Step 4: Save the modified document to a new file + doc.save("YOUR_DIRECTORY/output.html"); + } +} +``` + +### Apa yang dilakukan kode + +| Step | Action | Why it matters | +|------|--------|----------------| +| Load document | `new HTMLDocument(...)` | Mem-parsing HTML sumber menjadi DOM yang dapat Anda manipulasi. | +| Create element | `doc.createElement("p")` | Mencerminkan API browser, memastikan elemen mengikuti standar HTML. | +| Set text | `setTextContent(...)` | Menjamin escaping yang tepat dan menghindari pembuatan node teks secara manual. | +| Append to body | `doc.getBody().appendChild(...)` | Menempatkan elemen baru di tempat yang akan dirender oleh browser. | +| Save file | `doc.save(...)` | Menyimpan perubahan, menghasilkan file HTML yang valid siap digunakan lebih lanjut. | + +## Variasi umum dan kasus tepi + +* **Menambahkan banyak elemen** – ulangi langkah 2‑3 untuk setiap node baru sebelum memanggil `save`. +* **Menyisipkan sebelum node tertentu** – gunakan `insertBefore(newNode, referenceNode)` alih-alih `appendChild`. +* **Bekerja dengan fragmen** – `doc.createDocumentFragment()` memungkinkan Anda membangun sekumpulan node dan melampirkannya dalam satu operasi, yang meningkatkan kinerja untuk pembaruan besar. +* **Menangani karakter UTF‑8** – Aspose.HTML secara otomatis menulis UTF‑8; pastikan file sumber Anda dienkode dengan cara yang sama. + +## Tips praktis + +* **Penanganan path** – Gunakan `java.nio.file.Paths` untuk membangun path file yang independen platform. +* **Keamanan pengecualian** – Bungkus seluruh blok dalam pernyataan try‑with‑resources jika Anda perlu menutup stream tambahan. +* **Kinerja** – Untuk file HTML yang sangat besar, pertimbangkan memuat dokumen dengan `HTMLDocument(String, LoadOptions)` dimana Anda dapat menonaktifkan sumber eksternal untuk mempercepat parsing. + +## Verifikasi hasil + +Setelah menjalankan program, buka `output.html` di browser apa pun. Anda harus melihat paragraf “Added by Aspose.HTML” ditampilkan di tempat akhir body asli. Periksa sumber halaman untuk memastikan elemen `

` ada di dalam ``. + +## Kesimpulan + +Anda sekarang tahu cara **membuat elemen HTML** di Java, **menambahkan paragraf**, **menambahkan teks ke HTML**, dan **menambahkan elemen ke body** menggunakan Aspose.HTML. **Contoh java html** lengkap menunjukkan alur kerja yang bersih dan siap produksi yang dapat Anda perluas untuk memanipulasi bagian mana pun dari dokumen HTML. + +Selanjutnya, jelajahi topik terkait seperti **memodifikasi atribut**, **menghapus node**, atau **bekerja dengan gaya CSS** untuk membangun pipeline pemrosesan HTML yang lebih kaya. Selamat coding! + +## Apa yang Harus Anda Pelajari Selanjutnya? + +Tutorial berikut mencakup topik yang sangat terkait yang membangun teknik yang ditunjukkan dalam panduan ini. Setiap sumber mencakup contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [Buat elemen html baru dengan Java – Panduan Lengkap Aspose.HTML](/html/english/java/editing-html-documents/create-new-html-element-with-java-full-aspose-html-guide/) +- [tambahkan child ke body di Java – Tutorial Lengkap Aspose.HTML](/html/english/java/editing-html-documents/append-child-to-body-in-java-full-aspose-html-tutorial/) +- [Tambahkan Elemen ke Body dengan Aspose.HTML untuk Java menggunakan DOM Mutation Observer](/html/english/java/advanced-usage/dom-mutation-observer-observing-node-additions/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md b/html/indonesian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md new file mode 100644 index 0000000000..60f6ea6c32 --- /dev/null +++ b/html/indonesian/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/_index.md @@ -0,0 +1,257 @@ +--- +category: general +date: 2026-09-29 +description: Pelajari cara memilih elemen berdasarkan kelas, membaca HTML dari file, + dan menemukan tautan eksternal dalam Java. Panduan langkah demi langkah ini mencakup + iterasi NodeList secara efisien. +draft: false +images: +- PLACEHOLDER_URL/og-image.png +keywords: +- select elements by class +- read html from file +- find external links +- iterate nodelist java +- use queryselectorall java +language: id +lastmod: 2026-09-29 +og_description: Pilih elemen berdasarkan kelas di Java, baca HTML dari file, dan temukan + tautan eksternal menggunakan querySelectorAll. Ikuti contoh lengkap untuk mengiterasi + NodeList. +og_image_alt: Screenshot showing Java code that selects elements by class from an + HTML file +og_title: Pilih elemen berdasarkan kelas di Java – panduan lengkap dengan querySelectorAll +schemas: +- author: Aspose + dateModified: '2026-09-29' + description: Learn how to select elements by class, read HTML from file, and find + external links in Java. This step‑by‑step guide covers iterating a NodeList efficiently. + headline: How to select elements by class in Java using querySelectorAll + type: TechArticle +- questions: + - answer: Yes. `Jsoup.parse` treats the input as a fragment and automatically adds + missing root elements, allowing selectors to work on the fragment’s body. + question: Does this work with HTML fragments that lack a `` root? + - answer: The standard Java DOM API (`org.w3c.dom`) does not include `querySelectorAll`. + Libraries such as **HTMLUnit** or **jodd-lagarto** provide similar methods. + The pattern shown here—load, select with CSS, iterate—remains the same. + question: Can I use `querySelectorAll` without jsoup? + - answer: 'After obtaining each `Element`, you can call `link.attr("href", "newUrl")` + and then write the document back to disk with `Files.writeString`. ## Conclusion + You now know how to **select elements by class**, **read HTML from file**, **find + external links**, and **iterate a NodeList in Java** using `qu' + question: What if I need to modify the links instead of just printing them? + type: FAQPage +tags: +- Java +- HTML parsing +- DOM manipulation +title: Cara memilih elemen berdasarkan kelas di Java menggunakan querySelectorAll +url: /id/java/creating-managing-html-documents/how-to-select-elements-by-class-in-java-using-queryselectora/ +--- + +{{< blocks/products/pf/main-wrap-class >}} +{{< blocks/products/pf/main-container >}} +{{< blocks/products/pf/tutorial-page-section >}} + +# Cara memilih elemen berdasarkan kelas di Java menggunakan querySelectorAll + +Jika Anda perlu **memilih elemen berdasarkan kelas** saat memproses file HTML di Java, panduan ini menunjukkan secara tepat cara melakukannya. Anda akan belajar membaca HTML dari file, menggunakan `querySelectorAll` untuk menemukan tautan eksternal, dan mengiterasi `NodeList` yang dihasilkan dengan aman. + +Bekerja dengan HTML di Java sering terasa berat, tetapi pustaka modern memberi Anda API berbasis selector CSS yang ringkas. Contoh di bawah menggunakan **jsoup** (versi 1.17.2) karena ia mengimplementasikan selector bergaya `querySelectorAll` dan mengembalikan koleksi `Elements` yang berperilaku seperti `NodeList`. Anda dapat menyesuaikan logika yang sama ke implementasi DOM lain bila diperlukan. + +## Prasyarat + +Sebelum memulai, pastikan Anda memiliki: + +* JDK 17 atau lebih baru terpasang. +* Maven atau Gradle untuk manajemen dependensi. +* Familiaritas dasar dengan stream Java dan model DOM. + +Tambahkan jsoup ke proyek Anda: + +```xml + + + org.jsoup + jsoup + 1.17.2 + +``` + +```gradle +// Gradle +implementation 'org.jsoup:jsoup:1.17.2' +``` + +## Langkah 1: Baca HTML dari file + +Tugas pertama adalah memuat dokumen HTML dari disk. `Jsoup.parse(Path, Charset)` membaca file dan membangun pohon DOM yang dapat Anda query. + +```java +import java.nio.file.Paths; +import java.nio.charset.StandardCharsets; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; + +public class HtmlLoader { + /** + * Loads an HTML file and returns a Jsoup Document. + * + * @param filePath absolute or relative path to the HTML file + * @return parsed Document ready for DOM queries + * @throws IOException if the file cannot be read + */ + public static Document load(String filePath) throws IOException { + return Jsoup.parse(Paths.get(filePath).toFile(), + StandardCharsets.UTF_8.name(), + ""); + } +} +``` + +*Mengapa ini penting*: Memuat file sekali saja menghindari I/O berulang saat Anda mengiterasi elemen nanti. Objek `Document` menyimpan seluruh DOM, memungkinkan query selector yang cepat. + +## Langkah 2: Gunakan `querySelectorAll` untuk memilih elemen berdasarkan kelas + +Setelah dokumen berada di memori, Anda dapat **memilih elemen berdasarkan kelas** menggunakan selector CSS. Selector `"a.external"` mencocokkan tag `` yang memiliki kelas `external`—tepat apa yang Anda butuhkan untuk **menemukan tautan eksternal**. + +```java +import org.jsoup.select.Elements; +import org.jsoup.nodes.Element; + +/** + * Returns all anchor elements with the CSS class "external". + * + * @param doc the parsed HTML document + * @return a collection of matching Elements + */ +public static Elements findExternalLinks(Document doc) { + // querySelectorAll is simulated by the select() method in Jsoup + return doc.select("a.external"); +} +``` + +*Mengapa ini penting*: Menggunakan selector kelas bersifat ekspresif dan efisien. Pustaka menerjemahkan selector menjadi traversal yang dioptimalkan, sehingga Anda tidak perlu menulis loop manual untuk setiap node. + +## Langkah 3: Iterasi NodeList (Elements) di Java + +`Elements` mengimplementasikan `Iterable`, yang berarti Anda dapat menggunakan loop `for‑each` standar untuk **mengiterasi NodeList Java**. Loop di bawah mencetak atribut `href` setiap tautan. + +```java +/** + * Prints the href attribute of every external link. + * + * @param externalLinks collection returned by findExternalLinks() + */ +public static void printExternalLinks(Elements externalLinks) { + for (Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } +} +``` + +*Mengapa ini penting*: Iterasi langsung menjaga kode tetap terbaca dan menghindari overhead mengubah koleksi menjadi stream ketika Anda hanya memerlukan output sederhana. + +## Contoh lengkap yang berfungsi + +Menggabungkan ketiga langkah menghasilkan program mandiri yang dapat dijalankan dari baris perintah. + +```java +import java.io.IOException; +import org.jsoup.nodes.Document; +import org.jsoup.select.Elements; + +public class ExternalLinkExtractor { + + public static void main(String[] args) { + // Validate input + if (args.length != 1) { + System.err.println("Usage: java ExternalLinkExtractor "); + System.exit(1); + } + + String inputPath = args[0]; + + try { + // Step 1: read HTML from file + Document doc = HtmlLoader.load(inputPath); + + // Step 2: select elements by class (find external links) + Elements externalLinks = findExternalLinks(doc); + + // Step 3: iterate NodeList Java and print hrefs + printExternalLinks(externalLinks); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + } + + // Reuse methods from previous sections + private static Elements findExternalLinks(Document doc) { + return doc.select("a.external"); + } + + private static void printExternalLinks(Elements externalLinks) { + for (org.jsoup.nodes.Element link : externalLinks) { + System.out.println("External link: " + link.attr("href")); + } + } +} +``` + +### Output yang diharapkan + +Misalkan `input.html` berisi: + +```html +Example +About +OpenAI +``` + +Menjalankan program mencetak: + +``` +External link: https://example.com +External link: https://openai.com +``` + +## Tips profesional dan jebakan umum + +* **Encoding penting** – Selalu baca file dengan UTF‑8 (atau charset yang sesuai dengan sumber Anda). Encoding yang salah dapat merusak karakter dalam nilai atribut. +* **Beberapa kelas** – Jika sebuah elemen memiliki beberapa kelas (mis., `class="btn external"`), selector `"a.external"` tetap cocok karena selector kelas CSS memeriksa keberadaan token, bukan string lengkap. +* **Tip performa** – Jika Anda hanya membutuhkan atribut `href`, Anda dapat memintanya langsung dengan `doc.select("a.external[href]").eachAttr("href")`. Ini menghindari pembuatan objek `Element` lengkap untuk setiap kecocokan. +* **Keamanan null** – `link.attr("href")` mengembalikan string kosong jika atribut tidak ada, sehingga Anda tidak perlu memeriksa null sebelum mencetak. + +## Pertanyaan yang sering diajukan + +**T: Apakah ini bekerja dengan fragmen HTML yang tidak memiliki root ``?** +J: Ya. `Jsoup.parse` memperlakukan input sebagai fragmen dan secara otomatis menambahkan elemen root yang hilang, memungkinkan selector bekerja pada body fragmen. + +**T: Bisakah saya menggunakan `querySelectorAll` tanpa jsoup?** +J: API DOM standar Java (`org.w3c.dom`) tidak menyertakan `querySelectorAll`. Pustaka seperti **HTMLUnit** atau **jodd-lagarto** menyediakan metode serupa. Pola yang ditunjukkan di sini—memuat, memilih dengan CSS, mengiterasi—tetap sama. + +**T: Bagaimana jika saya perlu memodifikasi tautan alih-alih hanya mencetaknya?** +J: Setelah memperoleh setiap `Element`, Anda dapat memanggil `link.attr("href", "newUrl")` dan kemudian menulis kembali dokumen ke disk dengan `Files.writeString`. + +## Kesimpulan + +Anda kini tahu cara **memilih elemen berdasarkan kelas**, **membaca HTML dari file**, **menemukan tautan eksternal**, dan **mengiterasi NodeList di Java** menggunakan selector bergaya `querySelectorAll`. Contoh lengkap menunjukkan alur kerja bersih dan siap produksi yang dapat Anda sematkan dalam pipeline scraping atau transformasi yang lebih besar. + +Selanjutnya, jelajahi topik terkait seperti **parsing konten dinamis dengan HTMLUnit**, **menulis HTML yang telah dimodifikasi kembali ke disk**, atau **menggunakan stream Java untuk mengumpulkan URL tautan ke dalam list**. Semua ini dibangun di atas teknik seleksi berbasis kelas yang ditunjukkan di sini. Selamat coding! + + +## Apa yang Harus Anda Pelajari Selanjutnya? + + +Tutorial berikut mencakup topik yang sangat terkait dan membangun di atas teknik yang ditunjukkan dalam panduan ini. Setiap sumber menyertakan contoh kode lengkap yang berfungsi dengan penjelasan langkah demi langkah untuk membantu Anda menguasai fitur API tambahan dan mengeksplorasi pendekatan implementasi alternatif dalam proyek Anda sendiri. + +- [How to query HTML in Java – Select elements, filter by attribute, and get text](/html/english/java/css-html-form-editing/how-to-query-html-in-java-select-elements-filter-by-attribut/) +- [Iterate NodeList Java – Read HTML & Get Image src](/html/english/java/creating-managing-html-documents/iterate-nodelist-java-read-html-get-image-src/) +- [Load HTML Documents from File in Aspose.HTML for Java](/html/english/java/creating-managing-html-documents/load-html-documents-from-file/) + +{{< /blocks/products/pf/tutorial-page-section >}} +{{< /blocks/products/pf/main-container >}} +{{< /blocks/products/pf/main-wrap-class >}} +{{< blocks/products/products-backtop-button >}} \ No newline at end of file diff --git a/html/indonesian/java/css-html-form-editing/_index.md b/html/indonesian/java/css-html-form-editing/_index.md index 515d68240a..eb5acf0bca 100644 --- a/html/indonesian/java/css-html-form-editing/_index.md +++ b/html/indonesian/java/css-html-form-editing/_index.md @@ -39,6 +39,8 @@ Pelajari cara memuat dokumen HTML dan mengambil gaya menggunakan selector di Jav Pelajari cara memilih elemen